我对这个概念的理解:对象带有一个名为 __proto__
的隐藏属性,它提供对函数对象的原型(prototype)属性的引用。当我创建一个空对象并将其登录到控制台时,我看到该对象内的属性是 [[Prototype]]
而不是 __proto__
。您能否对我对这个概念的理解提供任何见解或纠正?
最佳答案
[[Prototype]]
指对象的内部槽 - 值保存在 JS 引擎中,但不直接暴露给正在运行的 JavaScript。请参阅here了解规范中的详细信息。
如果有故意公开内部槽中包含的值的方法,则通常可以检索该值。
对于内部槽的另一个示例,请考虑 Set 的值:
const set = new Set();
set.add('someValue');
someValue
在 Set 上不直接可见,但可以通过运行 native 代码的方法访问它,并且 native 代码访问 Set 的内部槽以查看它包含的内容 - for例如,使用 Set.prototype.has
。
对于[[Prototype]]
,可以通过调用__proto__
getter which does来检索该内部槽中的值。 :
- Return ?
O.[[GetPrototypeOf]]()
.
最终访问并返回[[Prototype]]
内部插槽。
此外,__proto__
已弃用 - 您应该更喜欢使用 Object.getPrototypeOf
和 Object.setPrototypeOf
。
关于javascript - __proto__ 与 [[Prototype]] 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69056461/