新功能返回新功能

Dav*_*ave 1 javascript oop factory instance node.js

我对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 }
Run Code Online (Sandbox Code Playgroud)

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

Den*_*ret 5

来自MDNnew:

构造函数返回的对象将成为整个新表达式的结果.如果构造函数未显式返回对象,则使用在步骤1中创建的对象.(通常构造函数不返回值,但如果他们想要覆盖正常的对象创建过程,他们可以选择这样做.)

这个摘录告诉你

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

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