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