nra*_*itz 5 javascript syntax new-operator
我正在查看Vows文档,并在几个地方使用语法
var myVar = new(MyFunction);
Run Code Online (Sandbox Code Playgroud)
例如
var promise = new(events.EventEmitter);
Run Code Online (Sandbox Code Playgroud)
我熟悉new MyFunction()并且new MyFunction(是的,我已经读过这个问题).但上面的语法对我来说是新的 - 它看起来像一个函数调用,虽然我怀疑它只是new MyFunction添加了一些括号.这些使用方式有什么区别new吗?如果没有,使用其中一个是否有任何好的理由?我原以为new MyFunction()是最清晰的.
如果这是重复的道歉 - 我搜索但找不到它.
它们看起来是相同的,只是在不同的地方加上了括号,也许是出于风格上的考虑,或者是为了让作者清楚起见。以下全部相同:
function Foo() { this.now = new Date(); }
var f1 = new Foo;
var f2 = (new Foo);
var f3 = new(Foo);
var f4 = new Foo();
var f5 = (new Foo());
Run Code Online (Sandbox Code Playgroud)
请注意,下面的形式有所不同,因为“Foo”函数被直接调用(由于括号的优先级),没有返回任何内容(未定义),这是“new”运算符的无效参数(因为“undefined”不是一个函数):
var x = new(Foo()); // TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)