使用new一个构造函数,如果函数返回return 1、return {}、return null、return true会发生什么情况?
在JavaScript中,当你使用new
关键字来调用一个构造函数时,这个构造函数内部实际上会经历以下步骤:
- 创建一个新的空对象。
- 将这个新对象的原型链连接到构造函数的
prototype
对象。 - 将构造函数的
this
上下文设置为这个新对象。 - 如果构造函数没有返回一个对象,则自动返回这个新创建的对象。
现在,让我们看看当你返回不同的值时,会发生什么情况:
-
return 1 (或任何原始值,如字符串、布尔值、数字、undefined):
- 构造函数会忽略这个返回值,并自动返回在开始时创建的新对象。
function Test() {
this.name = "Test";
return 1;
}
const obj = new Test();
console.log(obj); // Test { name: 'Test' }
-
return {} (或一个通过字面量创建的新对象):
- 构造函数会返回这个新创建的对象,而不是开始时自动创建的那个对象。
function Test() {
this.name = "Test";
return {};
}
const obj = new Test();
console.log(obj); // {},注意这不是开始时创建的那个对象
-
return null:
- 和返回原始值一样,构造函数会忽略这个
null
返回值,并自动返回在开始时创建的新对象。
- 和返回原始值一样,构造函数会忽略这个
function Test() {
this.name = "Test";
return null;
}
const obj = new Test();
console.log(obj); // Test { name: 'Test' }
-
return true (或任何其他布尔值):
- 同样,构造函数会忽略这个布尔值返回值,并自动返回在开始时创建的新对象。
function Test() {
this.name = "Test";
return true;
}
const obj = new Test();
console.log(obj); // Test { name: 'Test' }
总结:当使用new
关键字调用构造函数时,如果构造函数返回一个对象(通过new
或其他方式创建的对象,但不是通过字面量创建的对象,除非明确返回),那么这个对象会被返回。否则,构造函数会忽略返回值,并返回自动创建的新对象。但通常,构造函数不应该返回任何值,除非你有特定的原因需要这样做。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律