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