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

标签 javascript object constructor return instanceof

如果有这样的构造函数

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/

相关文章:

javascript - 使用 Select2 和其他表单控制元素或 input-group-btn 响应修复输入组

javascript - AngularJS - 文本字段完成后调用函数

javascript - leetcode 合并排序数组

c++ - 如何获取对象的名称

java - 调用对象的构造函数

c# - 构造函数应该将自己的参数直接初始化为私有(private)成员还是通过公共(public)字段(以 C# 为中心)?

javascript - 通过 setInterval 添加输入不起作用

php - 这个 MySQL 查询有问题吗?

python - 分析对象列表中的数据

java - 构造函数未定义问题