新功能返回新功能

时间:2015-07-23 13:30:39

标签: javascript node.js oop instance factory

我对JavaScript中的new关键字感到困惑。采取以下示例

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()"但是,当我打电话给"新B()"它似乎与" B()"做同样的事情,好像"新"被忽略了。在这两种情况下,instanceof等于" A"。到底是怎么回事?

1 个答案:

答案 0 :(得分:5)

来自the MDN on new

  

构造函数返回的对象成为结果   全新的表达。如果构造函数不起作用   显式返回一个对象,使用在步骤1中创建的对象   代替。 (通常情况下,施工人员不会返回值,但他们可以   如果他们想要覆盖正常的对象创建,请选择这样做   过程。)

此摘录显示

  • 您使用new B做什么不是正常的" (没有理由这样做)
  • B
  • 也会返回new B明确返回的值

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