我正在查看Vows documentation,并在几个地方使用语法
var myVar = new(MyFunction);
e.g。
var promise = new(events.EventEmitter);
我熟悉new MyFunction()
和new MyFunction
(是的,我已阅读this question)。但上面的语法对我来说是新的 - 它看起来像一个函数调用,虽然我怀疑它只是new MyFunction
加上一些括号。这些使用new
的方式有什么不同吗?如果没有,使用其中一个是否有任何好的理由?我原以为new MyFunction()
是最清晰的。
如果这是重复的道歉 - 我搜索但找不到它。
答案 0 :(得分:4)
如果
var MyFunction = function(){
alert("ok");
}
然后
var myVar = new(MyFunction);
变为
var myVar = new(function(){
alert("ok");
});
这只是组织代码的问题。
答案 1 :(得分:4)
它们看起来是相同的,只是在不同地方的括号,可能是风格上或作者的清晰度。以下各项完全相同:
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());
请注意,下面的表单是不同的,因为直接调用“Foo”函数(由于parens的优先级),不返回任何内容(undefined),这是“new”运算符的无效参数(因为“undefined”) “不是一个功能”:
var x = new(Foo()); // TypeError: undefined is not a function
答案 2 :(得分:3)
您所做的示例是等效的,没有区别:new
是一个运算符。在运营商周围寻找括号并不罕见:
if (typeof(myvar) === "function")
或者:
return(myvar);
但它们是运算符,不需要括号。我不喜欢他们在这些情况下,但这是个人偏好的问题。