новый MyFunction () против нового (MyFunction) - PullRequest
5 голосов
/ 27 марта 2012

Я просматриваю документацию Vows и в нескольких местах использует синтаксис

var myVar = new(MyFunction);

например

var promise = new(events.EventEmitter);

Я знаком с new MyFunction() и new MyFunction (и да, я прочитал этот вопрос ).Но приведенный выше синтаксис, ну, для меня новый - он выглядит как вызов функции, хотя я подозреваю, что это просто new MyFunction с некоторыми добавленными скобками.Есть ли разница между этими способами использования new?Если нет, есть ли хороший аргумент для использования одного или другого?Я бы подумал, что new MyFunction() был наиболее разборчивым.

Извинения, если это дубликат - я искал, но не мог его найти.

Ответы [ 3 ]

4 голосов
/ 27 марта 2012

Они кажутся одинаковыми, только с круглыми скобками в разных местах, возможно, стилистически или для ясности для автора (ов). Следующие элементы идентичны:

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" вызывается напрямую (из-за приоритета паренов), ничего не возвращая (undefined), что является недопустимым аргументом для оператора "new" (потому что "undefined" "не является функцией):

var x = new(Foo()); // TypeError: undefined is not a function
4 голосов
/ 27 марта 2012

если

var MyFunction = function(){
    alert("ok");
}

, то

var myVar = new(MyFunction);

становится

var myVar = new(function(){
    alert("ok");
});

Это просто вопрос организации кода.

3 голосов
/ 27 марта 2012

Пример, который вы сделали, эквивалентен, различий нет: new - оператор.Нередко встречаются круглые скобки вокруг таких операторов, как:

if (typeof(myvar) === "function")

или также:

return(myvar);

Но они являются операторами, скобки не нужны.Они мне не нравятся в этом контексте, но это вопрос личных предпочтений.

...