Подтвердить что ты не робот

"новый" перед анонимной функцией 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, и это то, что я получил:

Я предполагаю, что Стив просто не знал, что это не нужно. Оглядываясь назад на его первоначальную фиксацию, я вижу много ненужных новостей, которые с тех пор были удалены.

4b9b3361

Ответ 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"