https://www.cnblogs.com/cloud-/p/9152761.html
什么是原型链
JavaScript是面向对象的,每个实例对象都有一个proto属性,该属性指向它的原型对象,这个实例对象的构造函数有一个原型属性prototype,与实例的proto属性指向同一个对象。当一个对象在查找一个属性的时候,自身没有就会根据proto向它的原型进行查找,如果都没有,则向它的原型的原型继续查找,直到查到Object.prototype.proto_为null,这样也就形成了原型链。

对象之间通过原型关联到一起,好比用一条锁链将一个个对象连接在一起,在于各个对象挂钩后,最终形成了一条原型链。在读取对象的一个属性时,会先在对象中查询自有属性,如果不存在,那么再沿着原型链向上搜索匹配的继承属性,直到找到或到达原型链顶端,才停止搜索

function a(){}
var _a = new a();
console.log(_a.constructor == a)
console.log(_a.__proto__ == a.prototype)
console.log(_a.__proto__.constructor == a)
console.log(_a.constructor == a.prototype.constructor)
console.log(a.prototype.__proto__ == Object.prototype)
console.log(_a.__proto__.__proto__ == Object.prototype)
console.log(a.prototype.constructor.prototype.__proto__ == Object.prototype)
console.log(Object.prototype.constructor == Object)

全部为true

图片说明

任何对象都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象就有 proto属性,这样一层一层往上找,就形成了一条链,我们称此为原型链;
图中蓝色线就是原型链
当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
如果没有就查找它的原型(也就是 proto指向的 prototype 原型对象)。
如果还没有就查找原型对象的原型(Object的原型对象)。
依此类推一直找到 Object 为止(null)。 proto对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。
js对象就是通过原型链, 实现属性的继承