2010-10-12 51 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模式,您可以在匿名执行的函数中私下创建所有方法/函数,然后通过返回的对象选择您的公共接口。