我在javascript代码组织上遇到了this Q/A。
var DED = (function() {
var private_var;
function private_method()
{
// do stuff here
}
return {
method_1 : function()
{
// do stuff here
},
method_2 : function()
{
// do stuff here
}
};
})();
目前我这样做,
var DED = new Object;
DED = {
sidebar : {
method_1 : function (data){
//some stuff
},
method_2 : function(data){
//do more
}
},
main : {
//.......
},
globalVariables : {
//...
}
}
一个人的优势是什么? 警告:新手在这里。
答案 0 :(得分:4)
如上所述,该方法使用闭包来实现私有函数和数据。它是构造函数方法的替代方法(如下所示)。 E.g。
var DED = new (function()
{
var private_var;
function private_method()
{
// do stuff here
}
this.method_1 = function()
{
// do stuff here
};
this.method_2 = function()
{
// do stuff here
};
})();
使用您问题中显示的DED方法,没有构造函数。而是该函数返回从对象文字创建的对象。该对象中的函数将私有变量和方法封闭在其中。
答案 1 :(得分:0)
您从匿名自调用函数(function(){})()返回的内容是您为“模块”(DED)发布的界面。
DED.method_1()是公开的。 private_method / private_var不能从外部访问,但是自我调用函数内部的所有内容都可以访问它们。
如果您喜欢这种访问控制,这是防止其他开发人员意外搞乱模块内部的好方法。在很多情况下,我只是选择一个命名约定,如前导下划线表示内部。
Javascript非常动态如果有人真的想弄乱代码,他们没有写入权限,他们就可以这样做。 编辑:结果证明是一个错误的upuption而不是构造函数或闭包中的私有数据的情况。请参阅:http://www.crockford.com/javascript/private.html