JavaScript 的原型链(Prototype Chain)是 JavaScript 中用于实现继承和查找对象属性的一种机制。在 JavaScript 中,每个对象都有一个特殊的属性,称为 __proto__
(非标准但广泛支持,ES6 引入了 Object.getPrototypeOf() 方法作为替代),它指向了创建该对象的构造函数的 prototype 属性。这个链式的关系一直向上延伸,直到 null,这就是所谓的原型链。
function Person() {}
Person.prototype
const p = new Person()
如图所示
- Person构造函数通过 new 关键字可以创建实例。
- 实例p通过__proto__指向原型对象Person.prototype。那么有
p.__proto__===Person.prototype
ES6中是Object.getPrototypeOf(p) === Person.prototype
。 - Person.prototype.constructor === Person,原型对象的constructor属性又指向了Person构造函数。
以上是以某一个构造函数的角度来看到原型链的。
下面来看如何创建对象
Object
Object.prototype
const o = new Object()
与上面Person关系一样。
其中Person与Object存在怎样的关系呢。
Person.prototype.__proto__===Object.prototype
这就是两者之间的关系。
Person.prototype本质上是Object的一个实例,因此Person.prototype在第二张图中相当于是实例o,这就形成了原型链向上找的特性。
理解这两张图便理解了原型链是什么。