new调用构造函数时,若return对象则直接返回该对象并丢弃新实例,导致instanceof失效;若return原始值则忽略return,仍返回新实例;不推荐return对象以免破坏原型链和类型判断。

构造函数返回对象时,new 的行为会改变
当使用 new 调用构造函数时,JavaScript 默认会在最后返回新创建的实例对象。但这个默认行为可以被显式 return 覆盖——只要返回值是对象(包括数组、函数、正则、Date 等引用类型),new 表达式就直接返回该对象,而丢弃原本新建的实例。
返回普通对象,完全替代 this 实例
如果构造函数中 return 一个字面量对象或 new 出的对象,new 的结果就是它:
-
function Foo() { return { x: 1 }; }→new Foo()得到{x: 1},不是 Foo 的实例 -
return new Date()、return /abc/、return [1,2]都生效,返回对应类型对象 - 此时
new Foo() instanceof Foo为 false,因为原型链已断开
返回非对象类型,new 无视并仍返回实例
若 return 的是原始值(string / number / boolean / null / undefined / symbol / bigint),new 会忽略它,照常返回新创建的实例:
-
function Bar() { return 'hello'; }→new Bar()仍是 Bar 实例,不是字符串 -
return 42、return undefined、return null全部无效 - 注意:
return后无值,等价于return undefined,也属于被忽略的情况
不推荐在构造函数中 return 对象
虽然语法允许,但会破坏面向对象的基本约定:
- 实例不再继承构造函数的 prototype,无法访问原型方法
-
instanceof失效,类型判断不可靠 - 与 class 语法不兼容(class 构造器中 return 非对象会报错)
- 容易引发隐蔽 bug,尤其在继承链中混用时











