为什么在Object
上定义了JavaScript中的一些便利和反射方法,而在Object.prototype
上定义了其他方法?例如,要查明对象a
是否是对象b
的原型,请在isPrototypeOf
上调用a
:
a.isPrototypeOf(b)
相反,要获取对象a
的原型,请使用getPrototypeOf
作为参数在Object
上调用a
:
Object.getPrototypeOf(a)
对我来说,这似乎有点违反直觉,至少乍一看 - 我希望可以从对象本身开始查询对象的特征(比如它的原型)。 (换句话说,我倾向于期望getPrototype
上的Object.prototype
方法被称为a.getPrototype()
,而不是getPrototypeOf
上的Object
方法。 )
This answer做了相当不错的工作,解释了为什么你可能想要选择一个而不是另一个,但语言标准中特定决策背后的原因(参见上面的getPrototypeOf
示例)并不完全清楚对我来说。但我猜必须有一个:)这是什么?