# 继承(委托)

# 原型链继承

function Father(name = 'father') {
  this.name = name
}

function Son() {}
Son.prototype = new Person()
Son.prototype.constructor = Son

问题:

  1. 子类无法传参
  2. 父类的属性是引用类型,会和子类一同修改

# 组合继承

function Parent(name) {
  this.name = name
}

function Son(name) {
  Parent.call(this, name)
}

// 原型链关联

Son.prototype = new Parent()

const son = new Son('son')

问题:

  1. 父类的构造函数被调用了两次
  2. 子类原型上会存在父类实例属性,浪费内存

# 寄生组合继承

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
上次更新: 4/11/2022, 8:40:30 PM