function inheritPrototype(bbb,aaa){
let prototype = Object(aaa.prototype);
prototype.constructor = bbb;
bbb.prototype = prototype;
}
function Aaa(name){
this.name = name;
this.colors=["red","blue","green"];
}
Aaa.prototype.sayName = function(){
console.log(this.name);
}
function Bbb(name,age){
Aaa.call(this,name);
this.age = age;
}
inheritPrototype(Bbb,Aaa);
Bbb.prototype.sayAge = function(){
console.log(this.age);
}
let instance1 = new Bbb("aaasdfaf",99);
console.log(instance1);
- 组合继承存在效率问题,最主要的效率问题就是父类构造函数会被调用两次:
(1)Aaa.call(this,name);
(2)Bbb.prototype = new Aaa();
- 上面是一个寄生式组合继承的例子:
(1)只调用了一次Aaa构造函数,避免了Bbb.prototype上不必要也用不到的属性,效率更高。
(2)原型链保持不变,instanceof操作符和isPrototype方法正常有效。
(3)寄生式组合继承可以算是引用类型继承的最佳模式。