新函数返回新函数

New function returning new function

本文关键字:函数 新函数 返回      更新时间:2023-09-26

我对JavaScript中的新关键字有点困惑。以以下示例

为例
function A (value) {
    this.a = value;
}
function B (value) {
    return new A (value);
}
console.log (    B (0)); // { a: 0 }
console.log (new B (0)); // { a: 0 }

我希望能够创建"a"的新实例,而不必使用"new"。因为我有"B()",然而,当我调用"new B()"时,它似乎做了与"B()"相同的事情,好像"new"被忽略了。在这两种情况下,instanceof都等于"A"。到底发生了什么?

From MDN on new:

构造函数返回的对象成为的结果全新的表达方式。如果构造函数没有显式返回一个对象,使用步骤1中创建的对象代替。(通常构造函数不返回值,但它们可以如果他们想要覆盖正常的对象创建,可以选择这样做过程。)

这个摘录显示

  • 你用new B做的事情不是"正常的"(没有理由这样做)
  • B显式返回的值也由new B返回

如果你坚持new的正常使用,你不会感到困惑:传递给它一个普通的构造函数,这是一个函数,不返回任何东西,只是简单地初始化它的上下文(this)。