寄生组合继承和 ES6 继承
ES5 的继承,实质是先创造子类的实例对象,然后将再将父类的方法添加到 this 上。 ES6 的继承,先创造父类的实例对象(所以必须先调用 super 方法,然后再用子类的构造函数修改 this
寄生组合继承
function Super(foo) {
this.foo = foo;
}
Super.prototype.printFoo = function () {
console.log(this.foo);
};
function Sub(bar) {
this.bar = bar;
// 调用父类的构造函数
Super.call(this);
}
// 将子类是原型绑定在父类原型的复制对象上,之后修改子类原型就不会影响父类原型
Sub.prototype = Object.create(Super.prototype);
// 让子类原型的构造函数指向子类构造函数
Sub.prototype.constructor = Sub;
ES6 继承
class Super {
constructor(foo) {
this.foo = foo;
}
printFoo() {
console.log(this.foo);
}
}
class Sub extends Super {
constructor(foo, bar) {
Super(foo);
this.bar = bar;
}
}