【发布时间】:2011-10-10 04:03:06
【问题描述】:
如果有这样的构造函数
function a() {}
然后
(new a) instanceof a === true
但另一方面,
function a() { return {} }
结果
(new a) instanceof a === false
原来我是这么想的
function a() { return 123 }
会产生同样的结果。但是,当返回一个数字时,
(new a) instanceof a === true
这怎么可能?为什么我不能让构造函数返回 Object 以外的东西?
(我知道让构造函数返回一个数字是相当无用的,但我想了解这种行为的“原因”)
【问题讨论】:
-
构造函数并不意味着返回一个对象
-
吹毛求疵:您当然可以返回
Number,但不能返回number:function a() { return new Number(123); }。结果甚至可以用作数字 (a() + 1 === 124),它只是不会将===与具有其值的真实数字进行比较。 -
@Kevin Reid:我明白了。我猜那是因为
Number是一个对象,而number是一个原语。 (对吗?) -
pimvdb:是的。通常最好避免使用 value-wrapper 对象,因为它们的语义略有不同会引起混淆。您找到它们的主要位置是对数字调用的方法具有
this instanceof Number。
标签: javascript object constructor return instanceof