JavaScript构造函数return行为解析:背后运行原理是什么?
JavaScript构造函数中return的行为及运行机制解析
要搞懂构造函数里return的特殊行为,得先明白new关键字调用构造函数时的底层执行逻辑:
当你用new调用一个函数时,JS引擎会自动完成以下步骤:
- 创建一个空的新对象
- 把这个新对象的原型链指向构造函数的
prototype属性 - 将构造函数内部的
this绑定到这个新对象上 - 执行构造函数里的所有代码
- 根据构造函数的返回值决定最终返回结果——这就是核心逻辑:
- 如果构造函数显式返回一个对象类型的值(包括普通对象、数组、函数、甚至其他构造函数的实例),
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
相关产品推荐
相关产品推荐

