js原型链
每个 js 构造函数都有一个原型属性(prototype),这个原型属性是构造函数构造出所有对象的公共祖先,这个原型属性是一个对象,所有通过构造函数构造出的对象都可以使用其构造函数原型上的属性和方法(前提是自己身上没有)。
那么构造函数构造出的对象是如何使用其原型上的属性和方法呢?
其实每个 js 对象身上都有一个 __ proto __ 的属性,这个属性其实是一个指针,指向了该对象的构造函数的 prototype 原型属性。当对象自己身上没有某个属性或方法时,会通过指针属性 __ proto __ 向其构造函数的原型上面查找,如果原型上面没有该属性或方法,原型会通过自己的指针向原型的原型查找,直到找到需要的属性或方法。这样通过每个对象的 __ proto __ 指针一层一层链接其原型的链式的关系,就称之为原型链。
总结:
- 原型实质上是一个名为 prototype 的属性,该属性是一个对象,这个属性每个构造函数都有;
- 每一个 js 对象身上都会有一个 __ proto __ 的属性,这个属性其实是一个指针,指向了该对象的原型属性 prototype;
- 通过对象的 __ proto __ 指针属性将多个原型链接起来,这种链式的关系称为原型链。