JSFiddle - React, Tailwind, and code Playground
JavaScript
var extend = function(subClass,baseClass) {
subClass.baseConstructor = baseClass; //子类构造器总指向父类构造器;
subClass.base = {};
baseClass.call(subClass.base); //将父类构造器this引用方法抄入子类构造器base属性中
}
function Mouse() {};
function Animal(name) {
this.name = name;
this.say = function(message) {
console.log(this.name + ": " + message);
}
this.eat = function() {
this.say('Yum!');
}
}
function Cat() {
Cat.baseConstructor.call(this,'cat');
this.eat = function(food) {
if(food instanceof Mouse) {
Cat.base.eat.call(this); //调用构造器抄入的eat方法;
} else {
this.say('Yuk! i only eat mice - not ' + food.name);
}
}
}
extend(Cat,Animal);
function Lion() {
Lion.baseConstructor.call(this,'lion');
}
extend(Lion,Cat);
var cat = new Cat();
var lion = new Lion();
var mouse = new Mouse();
var unknowObj = {};
cat.eat(mouse);
cat.eat(unknowObj);
lion.eat(mouse);