【红宝书p248寄生式组合继承】
实现原理:定义一个prototype变量,保存Object.create(父类.prototype)的结果,即prototype对象的原型是父类的原型。同时prototype添加constructor属性指向子类。
之后再将prototype对象变成子类的原型。
1,将父类原型中的方法添加进子类原型中的原型,查看结构
<script>
function addPrototype(subType, superType) {
let prototype = Object.create(superType.prototype); // prototype对象的原型是父类的原型
prototype.constructor = subType; // 给prototype对象添加constructor属性,指向子类
subType.prototype = prototype; // 将prototype对象赋值给子类的原型
}
function SuperType(name) {
// 父类
this.name = name;
this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function () {
// 要的就是父类原型
console.log(this.name);
};
function SubType(name, age) {
}
addPrototype(SubType, SuperType);//利用函数修改子类的原型
console.dir(SubType);
</script>
2,子类中通过父类call子类,使子类拥有父类一样的属性
<script>
function addPrototype(subType, superType) {
let prototype = Object.create(superType.prototype); // prototype对象的原型是父类的原型
prototype.constructor = subType; // 给prototype对象添加constructor属性,指向子类
subType.prototype = prototype; // 将prototype对象赋值给子类的原型
}
function SuperType(name) {
// 父类
this.name = name;
this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function () {
// 要的就是父类原型
console.log(this.name);
};
function SubType(name) {
SuperType.call(this, name);
}
addPrototype(SubType, SuperType);//利用函数修改子类的原型
let sub = new SubType('ike')
console.dir(SubType);
</script>