2012-04-29 67 views
1

林構建應用程序的命名空間,它看起來如下:定義對象的原型,在自執行的函數

var app = {}; 
app.utils = { 
    Expiration: function(){ // contructor 
    ... // some code 
    }, 
    init: (function(){ 
     app.utils.Expiration.prototype = function(){....} 
    ()) 
}; 

,但我得到一個錯誤:TypeError: Cannot read property 'Expiration' of undefined,實際上這是真的怎麼一回事,因爲仍然被定義utils的,我知道我可以定義應用程序範圍之外的原型,我的問題是:我可以在應用程序或app.utils中使用自動執行功能或通過任何其他方式來定義它,謝謝。

+0

爲什麼你不想在最初的'util'定義之後定義它? – loganfsmyth 2012-04-29 02:10:26

+0

這可能聽起來很迂腐,但我只想讓我的代碼看起來很複雜。 – loki 2012-04-29 02:17:10

+1

@ user1108631 - 嗯,Javascript不允許它,所以你不能做到這一點,無論你想讓它看起來多麼多。 'app.utils'沒有正確定義,直到整個聲明完成後。 – jfriend00 2012-04-29 02:25:24

回答

5

您不能在靜態聲明中引用您自己的變量名稱。您的自執行函數會導致在執行靜態聲明時進行評估和執行。因此app.utils尚未定義。

還有其他選擇。這裏有一個:

var app = {}; 
app.utils = {}; 

app.utils.Expiration = function(){ // contructor 
    ... // some code 
    }; 

app.utils.Expiration.prototype = ... 

由於這些連續的語句增加性能的另一層面,這些語句必須得到執行一個接一個的順序後,使之前的要素到位。

相關問題