简单理解原型链

原型链

原型链就是构造函数,原型对象,和实例的关系

概念

每个构造函数都有一个指向该构造函数的原型对象(prototype)

每个构造函数的原型对象都有一个指向构造函数的指针(constructor)

每个原型内部都有一个指向其构造函数的原型对象的指针(__ proto __)

三者的关系图是这个样子的
简单理解原型链

这里多说一下为什么在图的右上角会多出来以一个 __ proto __ ,因为原型对象也是一个对象,而每个对象都有一个__ proto __ 属性,所以原型对象也是有 __ proto __ 属性的,不过由于对象的 __ proto __ 是指向其构造函数的原型对象的,而一切的对象都是有Object创建的,所以该 __ proto __ 指向的是Object

这里多说一下__ proto __ 属性,这个属性最早是由火狐浏览器引入的,用来通过实例对象访问原型

为什么会出现原型链?

​ 正常的在一个实例中寻找一个属性的顺序是

  1. 首先在实例内部找, 如果在该实例内部找不到,进入第二步
  2. 其次就是进入 __ proto __(即对象原型) 里面找,直到找不到

​ 那么有趣的来了,如果我们将该实例(假设 son1)的构造函数(Son)的原型对象改成另一个实例(son2),那么寻找的的顺序就变成了

son1 --> son2 --> son2.prototype --> … --> Object.prototype

这样就形成了一条链,就是原型链了