为什么内置对象函数的“prototype”字段在JavaScript中的处理方式不同?

为什么内置对象函数的“prototype”字段在JavaScript中的处理方式不同?,javascript,Javascript,从概念上讲,我认为如果一个对象obj是一个“类/构造函数”constructor的实例,那么object.getPrototypeOf(obj)==constructor.prototype 此模式适用于几乎所有的“类型”,包括大多数内置函数: Object.getPrototypeOf(Boolean.prototype)==Object.prototype 真的 Object.getPrototypeOf(Function.prototype)==Object.prototype 真的 Ob

从概念上讲,我认为如果一个对象
obj
是一个“类/构造函数”
constructor
的实例,那么
object.getPrototypeOf(obj)==constructor.prototype

此模式适用于几乎所有的“类型”,包括大多数内置函数:

Object.getPrototypeOf(Boolean.prototype)==Object.prototype
真的
Object.getPrototypeOf(Function.prototype)==Object.prototype
真的
Object.getPrototypeOf(String.prototype)==Object.prototype
真的
但这似乎不适用于内置函数
对象

Object.getPrototypeOf(Object.prototype)==Object.prototype

false/我认为
Object.getPrototypeOf(Object.prototype)
Object.prototype
没有原型的结果是一个很好的解释

const protoOf_true=Object.getPrototypeOf(true);
console.log(Boolean.prototype==protoOf_true);
const protoOf_Boolean=Object.getPrototypeOf(protoOf_true);
console.log(Object.prototype==protoOf_Boolean);
const protoOf_Object=Object.getPrototypeOf(protoOf_Boolean);

log(null==protoOf_对象)
Object.getPrototypeOf(Object.prototype)
返回
null
@VLAZ是的,我注意到了,但我的问题是为什么它的定义如此不一致?你在问为什么
Object.prototype
的原型不是
Object.prototype
?我让你考虑一下。我要给你们两个词作为提示:鸡和蛋。@VLAZ啊……对。从概念上讲,一个对象的原型必须是另一个不同的对象!我以前的理解确实有缺陷。这个规则胜过我在问题中提到的实例构造函数模式。为了打破鸡蛋循环并遵守这一规则,
Object.prototype
的原型经过了特殊处理,我的模式无法捕获。对吗?如果原型是另一个物体,那么这个物体的原型是什么?然后那个物体的。这是无限回归。实际上,引擎可以构造
对象。prototype
,然后将该对象指定为自身的原型。但是…重点是什么?您只需要得到一个原型的循环链接,其中
a.prototype
仍然是
a
。充其量也没什么用。更糟糕的是,它阻碍了原型链的运行(因为现在当下一个对象是当前对象时,您必须停止)。所以,
null
只是“原型链顶端”的一个稍微有用的标记。对。但我的问题是为什么它没有原型。(或者换一种说法,以空为原型。)@wlnirvana原型链的末端是一个地方。这就是原型等于null的地方。看医生-