JS继承——原型链

许多OO语言支持两种继承:接口继承实现继承。ECMAScript只支持实现继承,且继承实现主要依赖原型链实现。

原型链

基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法。

构造函数、原型和实例的关系:每个构造函数均有一个原型对象,原型对象均包含一个指向构造函数的指针,实例均包含一个指向原型对象的内部指针。若让原型对象等于另一个类型的实例,此时原型对象将包含一个指向 另一个原型的指针,相应地,另一个原型中也包含一个指向另一个构造函数的指针。若另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。

原型链基本模式,示例代码如下:

 1 
 2 
 3 
 4     原型链-继承
 5     
43 
44 
45 
46 

原型链的问题:
(1)原型链子类实例共享父类引用类型,同原型模型的问题一样。

(2)在创建子类的实例时,不能在不影响所有对象实例的情况下,向超类型的构造函数传递参数

因此,实践中很少单独使用原型链。

文章内容部分摘自《JavaScript高级程序设计(第3版)》

你可能感兴趣的:(JS继承——原型链)