变量继承机制:Prototype Chain 对象原型链

10 阅读2分钟

Prototype Chain 对象原型链

对象原型链是 JavaScript 中的继承机制,用于查找对象的属性和方法。

原型链规则

  1. 当访问一个对象的属性或方法时,JavaScript 会首先检查该对象自身是否包含该属性或方法。
  2. 如果该对象自身没有该属性或方法,JavaScript 会查找该对象的原型 (__proto__),即指向另一个对象的内部链接。
  3. JavaScript 将沿着原型链继续查找,直到找到目标属性或方法,或到达原型链的终点 (null),如果仍未找到,则返回 undefined

__proto__prototype 的关系补充

  1. 区别__proto__ 是每个对象实例都有的属性,它指向的是该对象的原型对象。而 prototype 是构造函数的属性,它是创建该构造函数的实例对象时所继承的原型对象。
  2. 链接关系:当你创建一个对象实例时,构造函数的 prototype 对象将被赋值给这个实例的 __proto__ 属性。换句话说,__proto__ 是一个对象实例与其构造函数的 prototype 对象之间的链接。

设计对象原型链的目的

  1. 内存优化:通过共享方法的方式来减少内存使用。例如,在构造函数中定义的方法会被所有实例共享,而不是在每个实例上都复制一遍。这种设计减少了重复代码,优化了性能。
  2. 代码结构:使用原型链可以使代码结构更加清晰和模块化。对象可以通过继承的方式扩展,增强代码的可维护性和扩展性。

对象原型链与作用域链的比较

对象原型链和作用域链在结构上不同,但它们都用于查找特定内容(属性或变量),且查找过程都涉及沿着链条向上查找。

  • 对象原型链:用于查找对象的属性和方法。如果一个对象自身没有找到某个属性或方法,会沿着原型链向上查找其原型。
  • 作用域链:用于查找代码中的变量。在代码执行时,如果在当前作用域中找不到某个变量,则会沿着作用域链向上查找父级作用域中的变量。