- 所有实例中都存在一个隐式原型对象:__proto__
- 所有函数中都存在一个显式原型对象:prototype
- 当实例中查找一个自身不存在的name属性时,会在__proto__对象中去找(也就是构造函数的prototype对象中去找),如果找不到再去上一层的__proto__中去找,直到返回null
function Foo () {
this.name = "老王"
}
let f1 = new Foo()
console.log(f1.age) // undefined
Foo.prototype.age = 40
console.log(f1.age) // 40 实例本身没有age属性 会在自身的隐式原型对象__proto__中找(也就是父元素的prototype对象)
console.log(f1.sex) // undefined
Object.prototype.sex = '女'
console.log(f1.sex) // 女 如果自身的__proto__中也不存在,则会去自身的this.__proto__.__proto__对象中找,也就是Object.prototype中找 直至返回null
Foo._proto__ === Object.prototype // true