JavaScript原型与原型链


原型链

每个构造函数都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针(constructor),而实例都包含一个指向原型对象的内部指针(__proto__
,假如让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型对象的指针,相应的,另一个原型对象中也包含着指向另一个构造函数的指针。
假如另一个原型对象又是另一个类型的实例,上述关系层层递进,就构成了实例与原型的链条。

img

判断原型链上关系的方式

  • instanceof —- 判断实例对象与构造函数的关系
  • __proto__ —- 访问实例对象的原型对象(已废弃,不建议使用)
  • constructor —- 访问原型对象/实例对象对应的构造函数
  • isPrototypeOf() —- 判断对象之间是否有原型链关系
  • Object.getPrototypeOf() —- 获取某个实例对象对应的原型对象

修改原型

  • [构造函数].prototype.[方法] —- 在原型对象上增加方法
  • [构造函数].prototype = {} —- 字面量方式修改原型对象,此方式constructor指向会出现问题,需要重新指定
  • [构造函数1].prototype = new [构造函数2]() —- 将一个实例对象指定为另一个构造函数的原型,同样需要重新指定constructor指向
  • Object.create() —- 以指定对象作为原型来创建实例
  • Object.setPrototypeOf(A, B) —- 将B设定为A的原型对象

文章作者: Snail-Lu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Snail-Lu !
  目录