引用类型数据都有对象特性,
每个对象都有一个__proto__属性(null除外),属性值是一个普通对象,
每个函数都有prototype属性,函数也是对象
实例对象通过__proto__访问构造函数的prototype属性,
当你试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么它会去它的_proto_中寻找
function Person() {
}
Person.prototype.name = 'Person'
let person1 = new Person()
console.log(person1)
console.log(person1.__proto__.name === Person.prototype.name) // true
console.log(person1.__proto__ === Person.prototype) // true
通过打印这个例子会发现
person1中的
_proto_属性下有个name属性,刚好和person.prototype.name的值相等,可以得到实列person1是通过_proto_访问的构造函数的person的prototype属性;
还有一个constructor属性指向构造函数person
原型也是一个对象,每个对象都有一个__proto__属性(null除外),因此原型对象也是有__proto__的
也就是说当我们想查找一个对象的属性时通过__proto__属性查找prototype原型对象的属性,查找不到就通过的prototype的__proto__属性继续查找,直到找到或者到达object结束
本文仅作自己记忆,多有借鉴,不对请指出