构造函数中显式返回对象会覆盖默认的 this 返回值;若返回引用类型,则 new 表达式返回该对象,this 被丢弃,instanceof 失败;若返回原始值,则被忽略,仍返回 this。

构造函数中显式返回对象会覆盖默认的 this 返回值,这是 JavaScript 中一个关键但容易被忽略的行为。
构造函数默认返回 this
当你用 new 调用函数时,JavaScript 会自动创建一个空对象,并将其绑定为该函数内的 this。如果函数体内没有 return 语句,或只返回原始值(如字符串、数字、undefined、null),那么 new 表达式最终返回的就是这个新创建的 this 对象。
例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function Person(name) {
this.name = name;
}
const p = new Person('Alice');
console.log(p.name); // 'Alice'
console.log(p instanceof Person); // true
显式 return 对象:this 被完全替换
如果构造函数中使用 return 显式返回一个**对象(包括数组、函数、正则、Date 等引用类型)**,new 的结果就不再是那个自动创建的 this,而是你 return 的那个对象——this 被丢弃了。
-
返回的对象与 this 无关:即使你在 return 前给
this赋了属性,这些操作也会失效。 -
instanceof 检查失败:返回的对象不是由该构造函数“构造”的,所以不通过
instanceof判断。
function Person(name) {
this.name = name; // 这行执行了,但没用
return { age: 25 }; // 覆盖了默认 this
}
const p = new Person('Alice');
console.log(p.age); // 25
console.log(p.name); // undefined
console.log(p instanceof Person); // false
return 原始值不会影响 this
如果 return 的是原始值(string、number、boolean、null、undefined、symbol),JavaScript 会忽略它,仍然返回新创建的 this 对象。
function Person(name) {
this.name = name;
return 'ignored'; // 会被忽略
}
const p = new Person('Bob');
console.log(p.name); // 'Bob'
console.log(p instanceof Person); // true
实际应用中的注意事项
这种行为在工厂模式、单例封装或兼容旧 API 时偶尔会用到,但需格外小心:
- 避免意外返回对象导致原型链断裂或
instanceof失效。 - 若想控制返回值,更推荐用普通函数 + 显式对象创建,而非依赖构造函数的 return 行为。
- ES6 class 构造器中禁止 return 非空对象(会报错),这是对这种易错行为的约束。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










