构造函数显式 return 引用类型时,new 返回该对象而非 this 实例,导致 instanceof 为 false、无 constructor、无法调用原型方法;return 原始值(含 null)则仍返回 this;class 构造器禁止此行为,会抛 typeerror。

构造函数内部显式 return 一个对象,不会改变 this 本身的指向,但会让 new 表达式的最终返回值变成那个对象,而不是 this 所指的新实例。
return 对象 → new 结果被完全替换
只要 return 的是引用类型(普通对象、数组、函数、Date、RegExp、Map 等),new 就直接返回它,丢弃原本创建的 this 实例:
-
instanceof判定为 false(因为原型链未连接到构造函数) - 对象没有
constructor属性指向原构造函数 - 无法调用构造函数原型上的方法(如
Person.prototype.say()) -
this在函数体内依然有效,只是它创建的对象最终没被返回
return 原始值 → this 实例照常返回
返回 undefined、null、字符串、数字、布尔、symbol 或 bigint,new 会忽略该 return,仍返回 this:
- 原型链完整,
__proto__指向构造函数的prototype -
instanceof和constructor属性都正常 -
return undefined等价于不写 return
null 是个特例:它不算对象
虽然 null 在 typeof 中返回 "object",但它属于原始值。构造函数中 return null 会被忽略,仍返回 this:
- 这和
return {}或return []行为完全不同 - 别被
typeof null === "object"这个历史 bug 带偏判断逻辑
class 构造器不允许这种覆盖
ES6 class 的 constructor 如果显式 return 非 this 对象,运行时会抛出 TypeError:
- 这是 class 语法的限制,而 function 构造函数仍允许
- TypeScript 编译期也可能报错,需用类型断言或调整设计
- 实际用于单例、对象池或代理封装时,function 构造函数更灵活
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











