Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript组织_Javascript_Code Organization - Fatal编程技术网

javascript组织

javascript组织,javascript,code-organization,Javascript,Code Organization,我是在javascript代码组织方面遇到的 var DED = (function() { var private_var; function private_method() { // do stuff here } return { method_1 : function() { // do stuff here }, method_2 : function() {

我是在javascript代码组织方面遇到的

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

 }
一个比另一个有什么优势?

警告:这里是新手。

如前所述,该方法使用闭包实现私有函数和数据。它是构造函数方法(如下)的替代方法。例如


对于问题中显示的DED方法,没有构造函数。相反,该函数返回从对象文本创建的对象。该对象中的函数具有封闭的私有变量和方法。

如图所示,该方法使用封闭来实现私有函数和数据。它是构造函数方法(如下)的替代方法。例如


对于问题中显示的DED方法,没有构造函数。相反,该函数返回从对象文本创建的对象。该对象中的函数具有封闭的私有变量和方法。

从匿名自调用函数(function(){})()返回的是为“模块”(DED)发布的接口

DED.method_1()是公共的。private_method/private_var无法从外部访问,但自调用函数内部的所有内容都可以访问它们

如果您喜欢这种访问控制,那么这是防止其他开发人员意外干扰模块内部的好方法。在很多情况下,我会选择一个命名约定,比如一个前导下划线来表示内部


Javascript是非常动态的,如果有人真的想弄乱代码,他们没有写权限,他们将能够这样做编辑:这证明是一种错误的关联,而不是构造函数或闭包中的私有数据。请参阅:

从匿名自调用函数(function(){}())返回的是为“模块”(DED)发布的接口

DED.method_1()是公共的。private_method/private_var无法从外部访问,但自调用函数内部的所有内容都可以访问它们

如果您喜欢这种访问控制,那么这是防止其他开发人员意外干扰模块内部的好方法。在很多情况下,我会选择一个命名约定,比如一个前导下划线来表示内部


Javascript是非常动态的,如果有人真的想弄乱代码,他们没有写权限,他们将能够这样做编辑:这证明是一种错误的关联,而不是构造函数或闭包中的私有数据。请参阅:

如果第一个示例和第二个示例使用相同的名称,则回答此问题会容易得多。次要说明:您不需要将DED初始化为新对象。下一行中的对象文字符号也会做同样的事情。如果您想要本地作用域,请不要忘记“var”。@kioopi如果您忘记了“var”,这是否意味着它会将DED绑定到window.DED属性(假设它在浏览器中运行)?@jamiebarrow是的,没错。默认为全局范围是javascript的一个非常糟糕的部分。如果第一个示例和第二个示例使用相同的名称,那么回答这个问题就会容易得多。次要说明:您不需要将DED初始化为新对象。下一行中的对象文字符号也会做同样的事情。如果您想要本地作用域,请不要忘记“var”。@kioopi如果您忘记了“var”,这是否意味着它会将DED绑定到window.DED属性(假设它在浏览器中运行)?@jamiebarrow是的,没错。默认为全局作用域是javascript非常糟糕的一部分。嗯,“访问控制”很有意义。我现在正在学习,所以从来没有想过“其他开发人员”会制造问题。确切地说,你认为其他代码可以访问私有变量吗?有趣的是,我偶然发现了一个可以访问封闭私有成员的边缘案例:它使用参数的非标准属性“调用者”。嗯,“访问控制”很有意义。我现在正在学习,所以从来没有想过“其他开发人员”会制造问题。确切地说,你认为其他代码可以访问私有变量吗?有趣的是,我偶然发现了一个可以访问封闭私有成员的边缘案例:它使用参数的非标准属性“调用者”。使用它们之后,意识到构造器是令人敬畏的在使用它们之后,意识到构造器是令人敬畏的
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
  };
})();