By William.D.King
类式继承
function SuperClass() {
this.superName = 'Shuai B',
this.houGong = ['Miku', 'Inory']
}
SuperClass.prototype.getSuperValue = () => {
return this.superName;
}
function SubClass() {
this.subName = 'william';
}
SubClass.prototype = new SuperClass();
SubClass.prototype.getSuperValue = () => {
return this.subName;
}类式继承:问题
1.prototype(父类实例)的引用属性被共用,修改会影响所有实例
2.无法向父类传递参数
a.houGong.push('Lisa');
console.log(b.houGong); // ['Miku', 'Inory', 'Lisa']解决了共用属性的问题
But: 没有原型继承
let a = SubClass(),
b = SubClass();
a.houGong.push('Lisa');
console.log(b.houGong); // ['Miku', 'Inory']两种继承结合
But: 调用了两次父类的构造函数
function SubClass() {
this.subName = 'william'
SuperClass.call(this);
}
SubClass.prototype = new SuperClass();function SubClass() {
this.subName = 'william'
SuperClass.call(this);
}
function inheritPrototype(subClass, superClass) {
function F() {};
F.prototype = superClass.prototype;
var p = new F();
subClass.prototype = p;
}
inheritPrototype(SubClass, SuperClass);