javascript - __proto__ 与 [[Prototype]] 有何不同?
问题描述
我对这个概念的理解:对象带有一个名为的隐藏属性__proto__
,它提供对函数对象原型属性的引用。当我创建一个空对象并将其登录到控制台时,我看到对象中的属性是[[Prototype]]
而不是__proto__
. 你能对我对这个概念的理解提供任何见解或更正吗?
解决方案
[[Prototype]]
指的是对象的内部槽- 保存在 JS 引擎中但不直接暴露给正在运行的 JavaScript 的值。有关规范的详细信息,请参见此处。
如果存在故意公开它的方法,则通常可以检索包含在内部槽中的值。
对于内部插槽的另一个示例,请考虑 Set 的值:
const set = new Set();
set.add('someValue');
不直接在someValue
Set 上可见,但可以通过运行本机代码的方法访问它,并且本机代码访问 Set 的内部槽以查看它包含的内容 - 例如,使用Set.prototype.has
.
在 的情况下[[Prototype]]
,可以通过调用__proto__
getter 来检索该内部插槽中的值,它会:
- 返回 ?
O.[[GetPrototypeOf]]()
.
最终访问并返回[[Prototype]]
内部插槽。
此外,__proto__
不推荐使用 - 您应该更喜欢使用Object.getPrototypeOf
and Object.setPrototypeOf
。
推荐阅读
- c++ - vscode intellisense 找不到 cmake 项目中包含的头文件
- python - Selenium / Python:为什么在我的 for 循环迭代中找到第一个元素后,我的 Selenium find_element_by 不再找到元素?
- reactjs - Reactjs三元不显示返回
- android - 为什么我们需要在 Android Studio 中进行 Clean and Rebuild 项目
- spark-streaming - 如何使用 between join 加入 spark rdd?
- javascript - 如何将 MagentaJS musicVAE 模型加载到 Python magenta MusicVAE 中
- php - CURDATE() 返回 NULL
- vue.js - 此消息类型不允许使用参数:nonce
- python - 训练深度神经网络时出现分段错误(核心转储)/torch/cuda/__init__.py”,_lazy_init 中的第 172 行
- react-native - 按下按钮更改图标