2012-04-26 97 views
0

里面我看到了下面的代码Javascript模块模式。如何访问全局模块

var MODULE = (function() { 
var my = {}, 
    privateVariable = 1; 

function privateMethod() { 
    // ... 
} 

my.moduleProperty = 1; 
my.moduleMethod = function() { 
    // ... 
}; 

return my; 
}()); 

属性可以像MODULE.moduleProperty访问,对吧? 但是,如何访问模块内的全局变量privateVariable和privateMethod()(这是全局变量模块的错误...)

+0

你可以直接使用/直接调用它们,对吗?由于它们是在模块关闭的范围内声明的,因此该关闭中的所有内容都可以访问它们。我错过了什么吗? – maerics 2012-04-26 16:30:46

+0

好的......所以我不能在封闭之外访问它们......所以提供隐私? – 2012-04-26 16:32:04

+1

是的,这是关闭点(和模块模式)。在闭包中声明的任何变量都可以在闭包中访问,但不在其外部,除非它被指定为模块对象的属性。 – maerics 2012-04-26 16:34:10

回答

1

只能从内部模块代码本身访问它们的方式:

var MODULE = (function() { 
var my = {}, 
privateVariable = 1; 
function privateMethod() { 
    alert('this is private!'); 
} 

my.moduleProperty = 1; 
my.moduleMethod = function() { 
    privateMethod(); 
    return privateVariable; 
}; 
return my; 
}()); 

这样做:

MODULE.moduleMethod(); 

将调用私有方法(和警惕“!这是私人地方”)和返回privateVariable的值。

无法访问MODULE范围之外的privateVariable或privateMethod。

var MODULE = (function() { 
//...declare your module as above 
}()); 

console.log(MODULE.privateVariable); //logs undefined 

希望能够帮助您为您解决问题。

1

不,它们不是全局变量,它们是匿名函数中的局部变量。

您可以从函数中的任何代码访问它们,但在函数之外它们不能直接访问。