首页 > 解决方案 > __proto__ 与 [[Prototype]] 有何不同?

问题描述

我对这个概念的理解:对象带有一个名为的隐藏属性__proto__,它提供对函数对象原型属性的引用。当我创建一个空对象并将其登录到控制台时,我看到对象中的属性是[[Prototype]]而不是__proto__. 你能对我对这个概念的理解提供任何见解或更正吗?

标签: javascriptprototype

解决方案


[[Prototype]]指的是对象的内部槽- 保存在 JS 引擎中但不直接暴露给正在运行的 JavaScript 的值。有关规范的详细信息,请参见此处

如果存在故意公开它的方法,则通常可以检索包含在内部槽中的值。

对于内部插槽的另一个示例,请考虑 Set 的值:

const set = new Set();
set.add('someValue');

不直接在someValueSet 上可见,但可以通过运行本机代码的方法访问它,并且本机代码访问 Set 的内部槽以查看它包含的内容 - 例如,使用Set.prototype.has.

在 的情况下[[Prototype]],可以通过调用__proto__getter 来检索该内部插槽中的值,它会

  1. 返回 ?O.[[GetPrototypeOf]]().

最终访问并返回[[Prototype]]内部插槽。

此外,__proto__不推荐使用 - 您应该更喜欢使用Object.getPrototypeOfand Object.setPrototypeOf


推荐阅读