js语法非常之灵活,不仅可以原型继承,而且还可以原型冒充、复制继承
原型冒充
function Cat(leg,tail){
this.leg = leg;
this.tail = tail;
this.climb = function(){alert('我会爬树')};
}
function Tiger(leg,tail,color){
//把要继承的类的语句拿来执行一遍。
this.parent = Cat;//把父类构造函数引入到一个parent属性上
this.parent.apply(this,arguments);
delete this.parent;
this.color = color;
}
var tiger = new Tiger(4,1,'yellow');
console.log(tiger);
tiger.climb();
console.log(tiger);
这是什么过程?
答:其实就是再用Tiger造对象时,用Tiger的语句影响一个空对象{},
在Tiger影响空对象之前,先由Cat函数实施影响。
因此,最终得到的对象,是由Cat和Tiger共同作用过的对象。
复制继承
复制继承就是把父对象的所有属性,直接复制到自己身(对象)上
function Cat(leg,tail){
this.leg = leg;
this.tail = tail;
this.climb = function(){alert('我会爬树')};
}
function Tiger(color){
this.color = color;
this.extend = function(parent){
for(var key in parent){
if(!this.hasOwnProperty(key)){
this[key] = parent[key];
}
}
}
}
var tiger = new Tiger('yellow');
//tiger.climb();//出错
console.log(tiger);
tiger.extend(new Cat(4,1));
console.log(tiger);
tiger.climb();