javascript组合式继承与寄生组合式继承
javascript组合式继承
组合继承式javascript最常见的继承模式;不过他也有自己的不足。组合继承最大的问题就是无论在什么情况下都会调用两次超类型构造函数: 一次是在创建子类型原型的时候,另一次是在子类型构造函数内部。
function SuperType (name) {
this.name = name;
this.colors = ["red", "yellow", "blue"];
}
SuperType.prototype.sayName = function () {
console.log(this.name);
};
function SubType (name, time) {
SuperType.call(this, name); // 第二次调用 SuperType
this.time = time;
}
SubType.prototype = new SuperType(); // 第一次调用SuperType
SubType.prototype.constructor = SubType;
SubType.prototype.sayTime = function () {
console.log(this.time);
}
寄生组合式继承
寄生组合式继承, 通过借用构造函数来继承属性,通过原型链对的混成形式来继承方法。其基本思路是: 不必为了指定子类型的原型而调用超类型的构造函数,我们所需要的无非就是超类型原型的一个副本而已。
function inheritPrototype (subType, superType) {
var prototype = Object.create(superType.prototype); // 创建对象
prototype.constructor = subType; // 增强对象
subType.prototype = prototype; // 指定对象
}
function SuperType (name) {
this.name = name;
this.colors = ["red", "yellow", "blue"];
}
SuperType.prototype.sayName = function () {
console.log(this.name);
};
function SubType (name, time) {
SuperType.call(this, name);
this.time = time;
}
inheritPrototype(SubType, SuperType);
SubType.prototype.sayTime = function () {
console.log(this.time);
}