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