组合继承:子父类“拖家带口”
function Parent(name) {
this.name = name;
this.duty = "rise child"
}
function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
Child.prototype = new Parent() //这里构造了一个父类,因此父类会有name和duty
let child1 = new Child('Tom','30')
console.log(child1);
打印后发现子类和父类有相同的duty:"rise child",
寄生式继承:父类把属性“教给”子类,而不是自己上场
function Parent(name){
this.name = name;
this.duty = "rise child"
}
function Child(name, age){
Parent.call(this, name)
this.age = age
}
Child.prototype = Object.create(Parent.prototype) //子类的原型是父类的原型,这里没有构造一个父类出来
Child.prototype.constructor = Child //父类的原型里没有子类的构造方法,所以让子类重新获得原来的构造方法
let child1 = new Child('Tom', '30')
console.log(child1);
打印后发现只有子类有duty:"rise child",
总结:
组合继承是“父母帮忙带孩子”
寄生继承是“自己带孩子”