新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
)。