使用new一个构造函数,如果函数返回return 1、return {}、return null、return true会发生什么情况?

在JavaScript中,当你使用new关键字来调用一个构造函数时,这个构造函数内部实际上会经历以下步骤:

  1. 创建一个新的空对象。
  2. 将这个新对象的原型链连接到构造函数的prototype对象。
  3. 将构造函数的this上下文设置为这个新对象。
  4. 如果构造函数没有返回一个对象,则自动返回这个新创建的对象。

现在,让我们看看当你返回不同的值时,会发生什么情况:

  1. return 1 (或任何原始值,如字符串、布尔值、数字、undefined):

    • 构造函数会忽略这个返回值,并自动返回在开始时创建的新对象。
function Test() {
    this.name = "Test";
    return 1;
}

const obj = new Test();
console.log(obj); // Test { name: 'Test' }
  1. return {} (或一个通过字面量创建的新对象):

    • 构造函数会返回这个新创建的对象,而不是开始时自动创建的那个对象。
function Test() {
    this.name = "Test";
    return {};
}

const obj = new Test();
console.log(obj); // {},注意这不是开始时创建的那个对象
  1. return null

    • 和返回原始值一样,构造函数会忽略这个null返回值,并自动返回在开始时创建的新对象。
function Test() {
    this.name = "Test";
    return null;
}

const obj = new Test();
console.log(obj); // Test { name: 'Test' }
  1. return true (或任何其他布尔值):

    • 同样,构造函数会忽略这个布尔值返回值,并自动返回在开始时创建的新对象。
function Test() {
    this.name = "Test";
    return true;
}

const obj = new Test();
console.log(obj); // Test { name: 'Test' }

总结:当使用new关键字调用构造函数时,如果构造函数返回一个对象(通过new或其他方式创建的对象,但不是通过字面量创建的对象,除非明确返回),那么这个对象会被返回。否则,构造函数会忽略返回值,并返回自动创建的新对象。但通常,构造函数不应该返回任何值,除非你有特定的原因需要这样做。

posted @   王铁柱6  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示