本文最后更新于 2024-03-23T16:33:41+00:00
在 JS 中,每个用function
定义的函数,都有prototype
属性,指向一个普通对象,该对象存储的数据可供其实例
使用。
在 JS 中,每个对象都有__proto__
属性,指向一个普通对象,该对象存储的数据可供其使用。
结合上面两句话,得出的结果为:实例.__proto__ === 构造函数.prototype
1 2 3 4 5
| function Person() {}
const person = new Person()
person.__proto__ === Person.prototype
|
总结:对象有一个原型(__proto__
),函数有两个原型(__proto__、prototype
)
而原型链就是用来找属性/方法的一种规则,当在对象自身没有属性/方法时,则会去找其原型(__proto__
)对象上,若没有则再从原型(__proto__
)对象上的原型(__proto__
)对象找
完整版的原型链
1 2 3 4 5 6 7 8 9 10 11 12
| function Person() {}
const person = new Person()
person.__proto__ === Person.prototype
person.__proto__.__proto__ === Object.prototype
person.__proto__.__proto__.__proto__ === null
|
所有关系的原型链
如何判断实例:实例.__proto__ === 构造函数.prototype
,也就是instanceof
的核心判断,可以继承的哦
上述图中的关系为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| person.__proto__ === Person.prototype Person.__proto__ === Function.prototype Function.__proto__ === Function.prototype
person.__proto__.__proto__ === Object.prototype Person.__proto__.__proto__ === Object.prototype Function.__proto__.__proto__ === Object.prototype Object.__proto__.__proto__ === Object.prototype
person instanceof Person Person instanceof Function Function instanceof Function
person instanceof Object Person instanceof Object Function instanceof Object Object instanceof Object
|