Javascript 为什么构造函数只能返回一个对象?

Javascript 为什么构造函数只能返回一个对象?,javascript,object,constructor,return,instanceof,Javascript,Object,Constructor,Return,Instanceof,如果有这样的构造函数 function a() {} 然后 但另一方面, function a() { return {} } 导致 (new a) instanceof a === false 所以我想的是 function a() { return 123 } 也会导致同样的结果。但是,当返回一个数字时 (new a) instanceof a === true 这怎么可能?为什么我不能让构造函数返回对象以外的东西 (我知道让构造函数返回一个数字是毫无用处的,但我想了解这种行

如果有这样的构造函数

function a() {}
然后


但另一方面,

function a() { return {} }
导致

(new a) instanceof a === false

所以我想的是

function a() { return 123 }
也会导致同样的结果。但是,当返回一个数字时

(new a) instanceof a === true

这怎么可能?为什么我不能让构造函数返回对象以外的东西


(我知道让构造函数返回一个数字是毫无用处的,但我想了解这种行为的“原因”)

根据规范:如果调用构造函数返回一个对象,那么这个对象就是
新表达式的结果。如果构造函数不返回对象(但
未定义
或其他一些基本值),则结果是新创建的对象

如果允许使用原语,那么所有构造函数都必须显式返回某些内容(通常为“
this
”),否则结果将是
未定义的
(因为没有
返回的函数的结果是
未定义的
)。那将是一个不必要的麻烦


此外,可以依靠
new
始终返回一个对象,这是有道理的。

构造函数并不意味着要返回一个objectNitpickery:您当然可以返回一个
Number
,但不能返回
Number
函数A(){return new Number(123);}
。结果甚至可以用作一个数字(
a()+1===124
),它只是不会将
===
与其值进行比较。@Kevin Reid:我明白了。我猜这是因为
Number
是一个对象,而
Number
是一个原语。(对吗?)是的。通常最好避免使用值包装器对象,因为它们的语义稍有不同,可能会导致混淆。您发现它们的主要地方是,对一个数字调用的方法有
这个数字实例
(new a) instanceof a === true