设计思想:子类型的构造函数内部借用(调用)父类的构造函数
核心代码:子类型构造函数内:Person.call(this, params)
代码实现:
function Person2(params) {
// todo: 私有属性定义
}
// 复用方法
Person2.prototype.fn = function() {
// todo:
}
function Man2(params) {
Person2.call(this, params);
// 私有属性定义
this.name = 'Man2';
}
Man2.prototype.fn = function() {
// todo:
}
var man2 = new Man2(params);
注意:子类型的私有属性定义为什么要放到调用父类型构造函数之后
?
确保父类型的构造函数不会重写子类型定义的私有属性
优点:解决了原型链继承的缺点
1、引用类型值的原型属性;
2、在子类实例中可以往父类型的构造函数传参。
缺点:
1、在子类的构造函数中调用父类的构造函数,方法在构造函数内部定义,没有实现函数复用
;
2、在父类型的原型上定义的方法,对子类型不可见。