You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript构造函数return行为解析:背后运行原理是什么?

JavaScript构造函数中return的行为及运行机制解析

要搞懂构造函数里return的特殊行为,得先明白new关键字调用构造函数时的底层执行逻辑:

当你用new调用一个函数时,JS引擎会自动完成以下步骤:

  1. 创建一个空的新对象
  2. 把这个新对象的原型链指向构造函数的prototype属性
  3. 将构造函数内部的this绑定到这个新对象上
  4. 执行构造函数里的所有代码
  5. 根据构造函数的返回值决定最终返回结果——这就是核心逻辑:
    • 如果构造函数显式返回一个对象类型的值(包括普通对象、数组、函数、甚至其他构造函数的实例),new会直接返回这个显式对象,完全忽略之前创建的this对象
    • 如果构造函数返回的是原始类型值(字符串、数字、布尔、null、undefined),或者根本没有写return,new就会返回之前绑定好this的那个新对象

接下来对应你给出的三个例子逐一拆解:

1. 无显式return的情况

function User() {
  this.name = "Alice";
}

console.log( new User() ); // 输出 User { name: 'Alice' }

这里没有写return,new按照默认逻辑返回绑定了this的新对象,也就是预期的User实例。

2. 显式返回对象的情况

function User() {
  this.name = "Alice";

  return { name: "Jane" };
}

console.log( new User() ); // 输出 { name: 'Jane' }

这里显式返回了一个普通对象,new会直接采用这个返回值,之前创建的this对象会被丢弃,所以最终输出的是{ name: 'Jane' }而不是User实例。

3. 显式返回原始值的情况

function User() {
  this.name = "Alice";

  return "Jane";
}

console.log( new User() ); // 输出 User { name: 'Alice' }

这里返回的是字符串(属于原始类型),new会直接忽略这个返回值,依然返回之前创建并绑定好this的User实例,所以输出的还是带有name: 'Alice'的对象。

额外补充:哪怕返回的是null(虽然它是原始类型),结果也是一样的——new依然会返回this对象:

function User() {
  this.name = "Alice";
  return null;
}
console.log(new User()); // 输出 User { name: 'Alice' }

内容的提问来源于stack exchange,提问作者Incognito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:54:27