我刚刚发现__proto__不是对象的属性。它是Object.prototype( source )的访问器属性。Chrome 的控制台肯定让我感到困惑:/。
所以当我们看到类似的东西时:
我们做这样的事情:
o = {}; o.valueOf()
正在逐步发生什么?我不太清楚 Object.prototype 有什么作用。__proto__现在必须玩,如果它有任何帮助。
我正在重新阅读我保存的 MDN 文档和文章,但同时我非常感谢我的o示例中的分步说明。
我猜:
我知道这Object.prototype.__proto__是一个访问器属性,它将返回一个“特殊的、隐藏的”[[prototype]]“内部插槽”/属性。
在 的情况下o = {}; o.valueOf(),我怀疑o以某种方式有能力访问Object.prototype.__proto__将返回/引用的Object.prototype。这对我来说根本没有意义(如果你能明白Object.prototype.__proto__为什么不直接看,Object.prototype那么我确定这是不对的。
一步一步发生了什么?我不太确定
Object.prototype.__proto__现在必须扮演什么角色。
.__proto__on 的访问器在Object.prototype属性访问中完全不起任何作用。您没有明确使用它,也不应该这样做。
当您访问 时o.valueOf,引擎首先检查该对象是否o具有自己的valueOf属性。你的情况并非如此。然后它进入原型链,即引擎确实访问内部[[prototype]]Object.prototype槽来查找o继承自的。该对象确实有一个valueOf属性,因此引擎确实访问它并使用它所持有的函数值。然后调用属性访问的结果。
引擎可以直接访问内部槽,不需要使用任何语言级实体。同样,devtools 调试器、Object.getPrototypeOf函数或.__proto__getter 可以访问这些内部数据结构,因为这就是引擎实现它们工作的方式。
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |