2010-10-12 49 views
5

我正在讀關於JavaScript的最佳實踐的文章,有點弄糊塗了要使用的功能結構...的Javascript:要使用的功能結構

我想這可能對變量的作用域的影響和功能,但你會使用哪一種結構(哪一種被認爲是最佳實踐)?

結構1:使用對象字面值。

var obj1 = { 
    _myvar : 'myval', 

init: function() { 
    this.function1(); 
    this.function2(); 
}, 

function1: function() { 
    alert('function1'); 
}, 

function2: function() { 
    alert('function2'); 
} 
}; 
obj1.init(); 



結構2:裹在自動執行功能的代碼。

(function(){ 
var _myvar = 'myval', 

function1 = function() { 
    alert('function1'); 
}, 

function2 = function() { 
    alert('function2'); 
}, 

init = (function() { 
    function1(); 
    function2(); 
})(); 
})(); 
+0

相關:http://stackoverflow.com/questions/3220870/javascript-should-i-be-hiding-my-implementations – JulianR 2010-10-12 19:20:55

回答

3

如果您不希望別人干擾您的代碼和/或不想使用任何全局變量,則使用自動執行匿名函數。如果你想使用這些函數/對象/別的什麼地方,你會想使用第一個。

1

當您需要從代碼的其他部分訪問對象中的方法和變量時,「結構1」是合適的。在編寫其他地方可以重用的庫代碼時,這種格式應該始終是您的首選。

如果您不想與應用程序的其他部分共享您的代碼,並且希望保護變量和函數免受來自其他地方的干擾,那麼「結構2」是適當的。

0

我發現Christian Heilmann的Revealing Module Pattern非常有用。 (向下滾動到他頁面上的最後一個「綠色屏幕」代碼示例。)

使用is模式,您可以在匿名執行的函數中私下創建所有方法/函數,然後通過返回的對象選擇您的公共接口。