构造函数中显式返回对象会直接替换默认this实例并返回该对象,原始值返回被忽略;返回对象时this的修改无效,且返回对象不继承构造函数原型,instanceof和constructor均失效。

构造函数中显式返回对象,会直接替换默认创建的 this 实例,最终返回该对象,而不是新创建的实例。
构造函数默认行为与 return 的优先级
通常情况下,构造函数内部不写 return,或只返回原始值(如数字、字符串、undefined、null),JS 引擎会忽略这些返回值,自动返回新创建的 this 对象。但一旦显式 return 一个**对象(包括数组、函数、正则等引用类型)**,引擎就会放弃默认的 this,直接返回你指定的对象。
-
function Foo() { return {}; }→ 返回空对象,不是new Foo()创建的实例 -
function Foo() { return [1,2]; }→ 返回数组,instanceof Foo为false -
function Foo() { return 42; }→ 原始值被忽略,仍返回新实例
返回对象时 this 不再生效
即使你在构造函数里给 this 添加了属性,只要最后 return 了一个对象,那些修改就完全丢失——因为整个 this 被丢弃了。返回的对象和 this 没有关系,它可能是任意对象,甚至来自其他构造函数。
-
function Person() { this.name = 'Alice'; return { age: 30 }; }→ 结果是{ age: 30 },没有name -
function A() { return new Date(); }→new A()得到一个Date实例,不是A实例
实际应用中的注意事项
这种机制很少用于常规构造逻辑,但可能出现在工厂模式或兼容旧代码的封装中。需特别注意:返回的对象不会继承构造函数的原型,constructor 和 instanceof 都会失效。
立即学习“Java免费学习笔记(深入)”;
- 避免在构造函数中无意识返回对象,否则
instanceof判断会意外失败 - 如果真需要灵活返回,建议改用普通函数 + 显式
return,更清晰可控 - 箭头函数不能作为构造函数,也不存在
this绑定问题,自然不适用此规则
不复杂但容易忽略。


















