javascript - Object.__proto__ 中有什么?

标签 javascript google-chrome prototype v8 proto

在 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/

相关文章:

javascript - 多个 CSS 动画对齐问题

javascript - 在框架组件的应用程序中识别覆盖的工具

html - <select> <options> 上的 Chrome 错误或错误

google-chrome - Chrome浏览器返回多个Youtube API iframe时加载错误

javascript - PHP 表单 - 单击单选按钮提交表单

php - 弹出窗口关闭

javascript - 我没有在 Access-Control-Allow-Origin 中使用通配符,但 Chrome 说我是

javascript - 为什么原型(prototype)分配在这里不起作用?

javascript - 如何创建 Javascript 哈希表/关联数组原型(prototype)

javascript - 为什么我的子类不从 Javascript 中的父类继承属性?