2013-05-18 31 views
10

我正在閱讀KnockoutJS源代碼。「新」之前匿名函數調用返回對象

我跑進以下行,我不知道我理解......

ko.utils = new (function() { 

一般來說,結構似乎是沿着線:

ko.utils = new (function() { 

    // some variables declared with var 

    return { 
     export:value, 
     export:value 
    }; 

})(); 

我不不懂這個構造,爲什麼需要new?它有什麼作用?它對於什麼有用?

(我認爲,如果一個函數調用new它的名字之前被調用的構造函數,如果它返回一個對象是相同的invokation不new

更新:我問Github上的KnockoutJS團隊,這是我回來的:

我的猜測是,史蒂夫只是不知道這是不需要的。回顧他最初的承諾,我看到很多不必要的新聞已被刪除。

+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這非常聰明:)(你找出推理)。這種事''使用嚴格';'避免。這完全令人滿意,謝謝。 –