gpt4 book ai didi

javascript - Object.__proto__ 中有什么?

转载 作者:可可西里 更新时间:2023-11-01 02:40:55 25 4
gpt4 key购买 nike

在 Google Chrom 的 javascript 中,对象有一个名为 __proto__ 的属性,它指向它们的原型(prototype)(或父)对象。

var foo = {};
console.log(foo.__proto__ === Object.prototype); //returns true

但是,对于 Object 对象,这是不正确的。

console.log(Object.__proto__ === Object.prototype);    //returns false

Object.__proto__ 属性似乎是一个空方法

> console.log(Object.__proto__.toString());
function () {}

除了作为一个关于依赖于在标准主体之外启动的 javascript 功能的警告故事之外——Object.__proto__ 函数是什么?

最佳答案

对象图的顶部是为了与规范中其他地方设定的期望保持尽可能一致的。

必然会出现无法使用普通对象链接的情况,因为您“用完了对象”。

对 JavaScript 的基本理解使我们期望 Object[[Prototype]] 是用于创建 Object 的函数的原型(prototype)属性 函数对象。

我们希望使用 Function 函数对象创建 Function,所以...

Object.__proto__ === Function.prototype

因为我们位于对象图的顶部并且希望保持预期行为的一致性,所以我们将 [[Prototype]]Function 配置为 函数.原型(prototype).

Function.__proto__ === Function.prototype

从而确保 Function instanceof Function === true

我们可以证明 Function.prototype 是一个特殊的函数对象,因为:

Function.prototype.prototype === undefined

...每个用户定义的函数(fat-arrows 除外)在其原型(prototype)属性上都有一个对象。

由于以上原因:

Object.__proto__ === Function.__proto__

这可能看起来很奇怪,但如前所述,在对象图的顶部,我们可以指向一组有限的候选对象。

TC-39 现在需要识别 Object[[Prototype]][[Prototype]] 是什么。根据上面我们知道 Object[[Prototype]]Function.prototype

从某种意义上说,我们现在在对象图中位于 Function.prototype 之上,因此选择了一个特殊的 Object 实例(“原型(prototype)对象”)作为该值.

这意味着每个原型(prototype)链的顶部都可以方便地与 Object.prototype 绑定(bind)。

这当然也满足了一切“都是对象”的可取要求。

Object.__proto__.__proto__ === Object.prototype 

此时我们需要完成对象图,所以我们将Object.prototype[[Prototype]]设置为null.

Object.__proto__.__proto__.__proto__ === null

关于javascript - Object.__proto__ 中有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40920909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com