constructor 返回原始值时自动返回新实例,返回对象时则返回该对象并丢弃实例;箭头函数不可用作构造器;class 构造器遵循相同规则但需先调用 super()。

在 JavaScript 中,constructor 本身不会显式返回值(语法上不允许 return 语句返回原始值来覆盖实例),但它的执行结果受返回值类型影响——这是理解构造函数行为的关键细节。
constructor 中 return undefined 或不写 return:返回新创建的实例
这是最常见情况。只要构造函数没有 return,或 return 后跟 undefined、null、布尔值、数字、字符串、Symbol 等原始值,JavaScript 引擎都会忽略该返回值,自动返回新分配的实例对象。
-
注意:即使写了
return 42或return "hello",也等同于没写return,仍返回实例 - 此时
new Foo() instanceof Foo为true
constructor 中 return 对象(含数组、函数、正则等):返回该对象,丢弃新实例
如果构造函数显式 return 一个对象(包括普通对象、数组、日期、正则、Promise、甚至另一个构造函数的实例),那么 new 表达式将直接返回这个对象,而原本新建的实例被丢弃。
- 返回的对象与原构造函数无关,
instanceof检测会失败(例如new Foo() instanceof Foo === false) - 常见误用:意外返回
this的深层属性(如return this.data),导致返回非实例对象
箭头函数不能用作 constructor
箭头函数没有自己的 constructor 和 this 绑定机制,也不支持 new 调用。尝试 new (() => {}) 会直接抛出 TypeError。
- 类方法中的箭头函数不是构造器,只是普通函数表达式
- 想模拟“可 new”的行为,必须使用 function 声明或 class 声明
class 内部 constructor 的返回规则与 function 构造器一致
class 的 constructor 本质仍是函数,其返回逻辑完全遵循上述两条规则。但 class 构造器有额外限制:
- 必须显式调用
super()(子类中),否则访问this报错 - 不能在调用
super()前返回对象,否则报ReferenceError - 若子类 constructor 返回对象,同样会覆盖父类实例,且不再触发父类初始化逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











