javascript - __proto__ 与 [[Prototype]] 有何不同?

标签 javascript prototype

我对这个概念的理解:对象带有一个名为 __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来检索该内部槽中的值。 :

  1. Return ? O.[[GetPrototypeOf]]().

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

此外,__proto__ 已弃用 - 您应该更喜欢使用 Object.getPrototypeOfObject.setPrototypeOf

关于javascript - __proto__ 与 [[Prototype]] 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69056461/

相关文章:

JavaScript 构建构造函数的构造函数

javascript - 为什么间接更改复选框时不会触发复选框上的 onchange

javascript - 我怎样才能从数组中删除一些东西?

javascript - 使用 MeteorJS Collection 和 Angular 2 显示数据

javascript - 概念 : Creating a function that acts like a constructor in JavaScript

javascript - AngularJS 获取工厂对象的实例

javascript - JavaScript 中的方法继承

javascript - 找出 html 元素在 iframe 中的位置

javascript - 写$(window).scroll();有什么区别在 document.ready() 内部和外部?

javascript - 如何读取xml中另一个标签下标签的属性