js中的继承方法
继承是面向对象编程中很重要的一个概念,通过继承可以把父类中的属性和方法传递到子类中,就像是『财产继承』;
原型链继承
由于原型链的特性,只需要在子类的原型链上加入父类的属性和方法,子类就自动能够访问这些属性和方法,如:
1 | function SuperType(){ |
一般是通过将父类的实例赋予给子类的原型(prototype
),从而将父类的属性和方法加入至原型中;
疑问:一般而言,一个构造函数的原型(prototype
)的构造器(constructor
)会指向本身,但是如果该构造函数作为子类按照上述方法改变原型,其原型的构造器便指向了其父类的构造器;
借用构造函数
通过call
或apply
函数的特性,调用父类构造函数,将子类作为this
参数传入,从而将父类的属性和方法绑定到子类,如:
1 | function SuperType(){ |
组合继承
组合继承(combination inheritance),有时候也叫做伪经典继承,指的是将原型链和借用构造函数的技组合到一块,从而发挥二者之长的一种继承模式。其背后的思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承(传入参数)。这样,既通过在原型上定义方法实现了函数复用,又能够保证每个实例都有它自己的属性。