【发布时间】:2012-05-10 14:33:15
【问题描述】:
({}).toString.call(Number.prototype) === "[object Number]"
Number 原型对象本身就是一个 Number 对象(它的 [[Class]] 是“Number”),其值为 +0。
15.7.4
为什么Number.prototype 是一个数字会有用? (对于将 [[Class]] 设置为非 Object 的所有其他内置原型也是如此)
我之所以选择Number.prototype,是因为我可以想象Array.prototype 和Date.prototype 的合理遗留原因。
【问题讨论】:
-
+1 我总是喜欢奇怪的 JavaScript 问题。
-
我们应该有一个
wtfjs标签:) -
不确定这就是评论的原因。
Number.prototype覆盖了特殊的valueOf方法以生成数字,因此Number.prototype的原始形式是数字。拥有Number.prototype的行为就像一个原始包装器 w.r.t.valueOf但有 [[class]]object会很奇怪。 -
@ŠimeVidas 使用“JavaScript”标签是多余的。
-
@MikeSamuel “是 Number.prototype 是一个具有函数属性的对象,还是一个应该明智地表现出对 valueOf 调用等的对象”之间的区别是一个很好的观点。让它成为答案