如果有这样的构造函数
function a() {}
然后
(new a) instanceof a === true
但另一方面,
function a() { return {} }
结果
(new a) instanceof a === false
原来我是这么想的
function a() { return 123 }
会产生同样的结果。但是,当返回一个数字时,
(new a) instanceof a === true
这怎么可能?为什么我不能让构造函数返回对象以外的东西?
(我知道让构造函数返回一个数字是相当无用的,但我想了解这种行为的“原因”)
最佳答案
根据规范:如果调用构造函数返回一个对象,则此对象是 new
表达式的结果。如果构造函数不返回对象(但 undefined
或其他一些原始值),则结果是新创建的对象。
如果允许原语,那么所有构造函数都必须显式返回一些东西(通常是“this
”),否则结果将是undefined
(因为a的结果没有 return
的函数是 undefined
)。那将是一个不必要的麻烦。
此外,可以依赖 new
始终返回一个对象是有道理的。
关于javascript - 为什么构造函数只能返回一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6775486/