javascript组织

时间:2010-12-28 23:14:49

标签: javascript code-organization

我在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 : {
                   //...
            }

 }

一个人的优势是什么? 警告:新手在这里。

2 个答案:

答案 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