为啥构造函数只能返回一个对象?
Posted
技术标签:
【中文标题】为啥构造函数只能返回一个对象?【英文标题】:Why can a constructor only return an object?为什么构造函数只能返回一个对象? 【发布时间】: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
。
What is returned from a constructor?的可能重复
【参考方案1】:
根据规范:如果调用构造函数返回一个对象,那么这个对象就是new
-表达式的结果。如果构造函数没有返回对象(但undefined
或其他一些原始值),则结果是新创建的对象。
如果允许使用原语,那么所有构造函数都必须显式返回某些内容(通常是“this
”),否则结果将是 undefined
(因为没有 return
的函数的结果是 undefined
)。这将是一个不必要的麻烦。
此外,可以依赖 new
始终返回一个对象是有道理的。
【讨论】:
以上是关于为啥构造函数只能返回一个对象?的主要内容,如果未能解决你的问题,请参考以下文章