这个对象如何“看到”它的继承属性?

ton*_*120 6 javascript

我刚刚发现__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那么我确定这是不对的。

Ber*_*rgi 3

一步一步发生了什么?我不太确定Object.prototype.__proto__现在必须扮演什么角色。

.__proto__on 的访问器在Object.prototype属性访问中完全不起任何作用。您没有明确使用它,也不应该这样做。

当您访问 时o.valueOf,引擎首先检查该对象是否o具有自己的valueOf属性。你的情况并非如此。然后它进入原型链,即引擎确实访问内部[[prototype]]Object.prototype槽来查找o继承自的。该对象确实有一个valueOf属性,因此引擎确实访问它并使用它所持有的函数值。然后调用属性访问的结果。

引擎可以直接访问内部槽,不需要使用任何语言级实体。同样,devtools 调试器、Object.getPrototypeOf函数或.__proto__getter 可以访问这些内部数据结构,因为这就是引擎实现它们工作的方式。