新function返回新function

我对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 } 

我希望能够创build一个“A”的新实例,而不必使用“新”。 为此,我有“B()”,但是当我调用“new B()”时,它看起来与“B()”做了同样的事情,就像忽略了“new”一样。 在这两种情况下,instanceof等于“A”。 究竟是怎么回事?

从新的MDN :

由构造函数返回的对象成为整个新expression式的结果。 如果构造函数没有显式地返回一个对象,则使用步骤1中创build的对象。 (通常构造函数不返回值,但是如果他们想要覆盖正常的对象创build过程,他们可以select这样做。)

这个摘录显示了你

  • 你用new B做什么不是“正常的”(没有理由这样做)
  • B明确返回的值也由new B返回

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