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

pim*_*vdb 5 javascript constructor return object instanceof

如果有像这样的构造函数

function a() {}
Run Code Online (Sandbox Code Playgroud)

然后

(new a) instanceof a === true
Run Code Online (Sandbox Code Playgroud)

但另一方面,

function a() { return {} }
Run Code Online (Sandbox Code Playgroud)

结果是

(new a) instanceof a === false
Run Code Online (Sandbox Code Playgroud)

所以我在想的是

function a() { return 123 }
Run Code Online (Sandbox Code Playgroud)

会导致同样的事情.但是,当返回一个数字时,

(new a) instanceof a === true
Run Code Online (Sandbox Code Playgroud)

这怎么可能?为什么我不能让构造函数返回除Object之外的其他内容?

(我知道让一个构造函数返回一个数字是没用的但是我想理解这个行为的'为什么')

Jac*_*esB 7

根据规范:如果调用构造函数返回一个对象,那么这个对象就是new-expression 的结果.如果构造函数不返回对象(undefined或其他原始值),则结果是新创建的对象.

如果图元被允许,那么所有构造函数必须明确地返回的东西(通常为" this"),否则结果将是undefined(因为功能没有结果returnundefined).那将是一场不必要的麻烦.

此外,有意义的是new可以依赖于始终返回对象.