javascript组合继承

JS

在js中,组合继承是最常用的继承方式。

function Parent(value) {
  this.val = value
}
Parent.prototype.getValue = function() {
  console.log(this.val)
}
function Child(value) {
  Parent.call(this, value)
}
Child.prototype = new Parent()

const child = new Child(1)

child.getValue() // 1
child instanceof Parent // true

这种继承方式的核心是在子类的构造函数中通过Parent.call(this)继承父类的属性,然后改变子类的原型为new Parent()来继承父类的函数。

这种组合继承方式优点是构造函数可以传参,不会与父类引用类型共享,可以复用父类的函数,但也存在一个缺点是:在继承父类函数的时候调用了父类构造函数,导致子类的原型上多了不需要的父类属性,存在「内存上的浪费」。