为啥构造函数只能返回一个对象?

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,但不能返回numberfunction 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 始终返回一个对象是有道理的。

【讨论】:

以上是关于为啥构造函数只能返回一个对象?的主要内容,如果未能解决你的问题,请参考以下文章