构造函数中return对象时new表达式返回该对象并丢弃this,return原始值或不返回时才返回this;箭头函数的this继承构造函数执行时的this,但若return新对象则其属性不会被复制。

在 JavaScript 构造函数中,无法通过显式 return 改变 this 的绑定——this 始终指向新创建的实例对象(除非构造函数返回一个“有效”的对象,此时 new 表达式会直接返回那个对象,而忽略 this)。
构造函数的返回规则
当使用 new 调用函数时,JavaScript 引擎会:
- 创建一个空对象,并将其作为 this 绑定到函数内部;
- 执行函数体;
- 判断函数的返回值:
- 如果返回值是对象或函数(非 null),new 表达式最终返回该返回值,丢弃原本创建的 this 对象;
- 如果返回值是原始值(string、number、boolean、undefined、null、symbol、bigint),new 表达式忽略返回值,仍返回 this(即新创建的实例)。
return 对象时 this 不再生效
这不是“改变 this 绑定”,而是替换 new 的最终结果。this 在函数体内依然指向新对象,但这个对象被丢弃了:
function Person(name) {
this.name = 'ignored';
console.log(this); // Person {} —— this 确实存在且被赋值了
return { name: name, say: () => 'hello' };
}
const p = new Person('Alice');
console.log(p.name); // 'Alice'
console.log(p.say()); // 'hello'
console.log(p instanceof Person); // false —— 返回的是普通对象,不是 Person 实例
return 原始值或不返回 → this 生效
这时 new 才真正返回构造函数内部的 this:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
return undefined(隐式)或return 42、return 'abc'、return null:new 忽略返回值,返回 this; -
return this:等价于不返回,明确返回 this,结果仍是新实例; -
return {}或return new Date()等对象:new 返回该对象,this 被丢弃。
注意:箭头函数和 this 没有关系
构造函数内部的箭头函数不绑定自己的 this,它继承外层作用域的 this(即构造函数的 this)。但如果你 return 了一个新对象,箭头函数定义时的 this 仍指向原实例(因为定义时已确定),只是这个实例不再被 new 返回:
function Foo() {
this.id = 1;
this.fn = () => this.id; // this 指向 new 创建的实例(哪怕它被丢弃)
return { id: 2 };
}
const obj = new Foo();
console.log(obj.fn()); // TypeError: obj.fn is not a function —— fn 没被复制过去
因为 return 的对象是全新字面量,不包含 this 上定义的属性或方法。

















