新的MyFunction()与新的(MyFunction)

时间:2012-03-27 04:45:58

标签: javascript syntax new-operator

我正在查看Vows documentation,并在几个地方使用语法

var myVar = new(MyFunction);

e.g。

var promise = new(events.EventEmitter);

我熟悉new MyFunction()new MyFunction(是的,我已阅读this question)。但上面的语法对我来说是新的 - 它看起来像一个函数调用,虽然我怀疑它只是new MyFunction加上一些括号。这些使用new的方式有什么不同吗?如果没有,使用其中一个是否有任何好的理由?我原以为new MyFunction()是最清晰的。

如果这是重复的道歉 - 我搜索但找不到它。

3 个答案:

答案 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);

但它们是运算符,不需要括号。我不喜欢他们在这些情况下,但这是个人偏好的问题。