# 继承(委托)
# 原型链继承
function Father(name = 'father') {
this.name = name
}
function Son() {}
Son.prototype = new Person()
Son.prototype.constructor = Son
问题:
- 子类无法传参
- 父类的属性是引用类型,会和子类一同修改
# 组合继承
function Parent(name) {
this.name = name
}
function Son(name) {
Parent.call(this, name)
}
// 原型链关联
Son.prototype = new Parent()
const son = new Son('son')
问题:
- 父类的构造函数被调用了两次
- 子类原型上会存在父类实例属性,浪费内存
# 寄生组合继承
Object.create(Parent.prototype)
function Parent(name) {
this.name = name
}
function Son(name) {
Parent.call(this, name)
}
// 原型链关联
Son.prototype = Object.create(Parent.prototype)
Son.prototype.constructor = Son
const son = new Son(1)
son instanceof Parent