"новый" перед анонимной функцией Invocation Returning Object
Я читаю исходный код KnockoutJS.
Я столкнулся с следующей строкой, которую я не уверен, что понимаю...
ko.utils = new (function () {
Как правило, структура, по-видимому, идет по строкам:
ko.utils = new (function () {
// some variables declared with var
return {
export:value,
export:value
};
})();
Я не понимаю эту конструкцию, почему нужен new
? Что оно делает? Для чего это полезно?
(Я думал, что если функция вызывается с new
перед ее именем, она вызывается как конструктор, и если она возвращает объект, то она идентична invokation без new
.)
ОБНОВЛЕНИЕ: Я спросил команду KnockoutJS о github, и это то, что я получил:
Я предполагаю, что Стив просто не знал, что это не нужно. Оглядываясь назад на его первоначальную фиксацию, я вижу много ненужных новостей, которые с тех пор были удалены.
Ответы
Ответ 1
Это может быть некоторый шаблон, который препятствует this
достигать глобального контекста (не в этом случае, поскольку каждая переменная объявляется var
, но автор мог бы использовать ее как общий шаблон для создания объектов).
var x = new (function () {
this.foo = "bar";
return {
// whatever
};
})();
console.log(foo); // Uncaught ReferenceError: foo is not defined
var x = (function () { // without new
this.foo = "bar";
return {
// whatever
};
})();
console.log(foo); // "bar"