1

在 JavaScript 非标准属性 __proto__ 和函数 Object.getPrototypeOf(...) 中返回内部属性 [[Prototype]]。

对于所有函数,属性 'prototype' 是 Object.prototype 的一个实例,例如:

Array.prototype instanceof Object//true

但 Object.prototype 并非如此:

Object.prototype.__proto__ === null //true
Object.getPrototypeOf( Object.prototype ) === null //true

Mozilla 开发者文档只说:

对象的proto属性引用与其内部 [[Prototype]](通常称为“原型”)相同的对象,该对象可能是对象,也可能是 Object.prototype 的默认情况。原型,空。

Object.prototype 会更合适吗?原型或失败的 Object.getPrototypeOf (Object.prototype) 返回 Object.prototype?

这是一个错误吗?这个可以吗?为什么?

4

2 回答 2

5

原型链必须在某处停止。

如果Object.getPrototypeOf( Object.prototype ) === Object.prototypeJS 引擎试图从原型中解析某些东西,它会陷入无限循环。

它会沿着原型链向上走到Object.prototype,如果在那里找不到它,它会再往上走下去,Object.prototype直到无限

事实上,如果你自己尝试这样做,你会得到一个错误:

> Object.prototype.__proto__ = Object.prototype
Error: Cyclic __proto__ value

[[Prototype]]请注意,您也可以通过调用no 创建自己的对象Object.create(null)

于 2013-08-21T13:43:55.683 回答
1

虽然Object.prototype.__proto__目前大多数浏览器都支持它,但它的存在和确切行为仅在 ECMAScript 2015 规范中作为遗留功能进行了标准化,以确保 Web 浏览器的兼容性。为了获得更好的支持,请改用 Object.getPrototypeOf()。

链接:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto

于 2021-09-27T09:05:39.857 回答