1 __proto__
1.1 是什么
__proto__
是对象的属性(是对象内部属性 [[Prototype]]
的访问器),表示对象的原型,其值为创建此对象的构造函数的原型(prototype)。
1.2 有什么作用
- 查询对象的原型
- 组成原型链
- 对象的原型
__proto__
也有__proto__
属性,由一层层的__proto__
组成的链表,即所谓的原型链。当查询的属性没在当前对象上时,就会从对象的原型链上找,直到__proto__
为 null 还没找到时,才认为查询的属性为 undefined。
- 对象的原型
1.3 注意
现在更推荐使用
Object.getPrototypeOf / Object.setPrototypeOf
来获取和设置对象的原型。修改对象的
__proto__
属性时,对象必须是可扩展的(通过
Object.isExtensible()
判断),否则会抛出TypeError
错误。修改的新值必须为 object 或 null,否则不会起作用。
2 prototype
2.1 是什么
prototype
是函数的属性,指向函数的原型。
2.2 有什么作用
prototype
的内容会被所有实例共享,甚至某个实例被创建后再修改构造函数的 prototype
,都会反映到其他实例上。
2.3 注意
函数本质上也是对象,故构造函数也有 __proto__
属性。
参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/proto
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain
https://blog.csdn.net/cc18868876837/article/details/81211729