JS 的所有对象中都包含了一个 [proto] 内部属性,这个属性所对应的就是自身的原型 JS 的函数对象,除了原型 [proto] 之外,还有prototype属性,当函数作为构造函数创建实例时,该 prototype 属性值将作为实例对象的原型,
每个函数都有一个prototype属性,这个属性指向函数的原型对象。
每个对象(除null外)都会有的属性,叫做__proto__,这个属性会指向该对象的原型。
每个原型都有一个constructor属性,指向该关联的构造函数。
当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层(Object.prototype)为止。Object.prototype对象也有__proto__属性值为null。 当一个对象调用自身不存在的属性/方法时,就会去自己 [proto] 关联的前辈 prototype 对象上去找,如果没找到,就会去该 prototype 原型 [proto] 关联的前辈 prototype 去找。依次类推,直到找到属性/方法或 undefined 为止。从而形成了所谓的“原型链”。