为什么内置对象函数的“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的地方。看医生-