2013-05-18 2 views
10

Я читаю исходный код KnockoutJS."new" Перед анонимной функцией Invocation Возвращаемый объект

я побежал в следующую линию, я не уверен, я понимаю ...

ko.utils = new (function() { 

Как правило, структура, кажется, вдоль линий:

ko.utils = new (function() { 

    // some variables declared with var 

    return { 
     export:value, 
     export:value 
    }; 

})(); 

Я не» t понять эту конструкцию, зачем нужен new? Что оно делает? Для чего это полезно?

(я думал, что если функция вызывается с new перед его именем он вызывается как конструктор, и если он возвращает объект, он идентичен invokation без new.)

UPDATE: Я спросил команда KnockoutJS на github, и это то, что я получил:

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

+1

Насколько я могу судить, 'new' не имеет никакого эффекта в этом случае –

+0

по теме: [Правильно ли думать о функции выражения Javascript, который использует«новый»ключевое слово, как«статические»] (http://stackoverflow.com/questions/10406552/is-it-right-to-think-of-a-javascript-function-expression-that-uses-the-new-key) – Bergi

+0

Просто случилось встретить оба их ... – Bergi

ответ

10

Это может быть какой-то шаблон, который предотвращает 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" 
+0

+1 Это очень умно :) (из вас выяснить это рассуждение). Подобная вещь «используется строго», «избегает». Это вполне удовлетворительно, спасибо. –

Смежные вопросы