jQuery名称空间声明和模块化方法

dja*_*ngo 5 javascript jquery

我对如何继续我的项目感到困惑.我正在开发一个企业应用程序,其中要编写许多模块.大多数模块将使用大量的jQuery插件来创建复杂的网格,为不同的目的绘制图形,这意味着模块将向DOM添加div,表等.

我想保留命名空间,因为这将是大型应用程序.为此,我遇到了原型方法自动执行的匿名函数.自动执行匿名函数似乎被推荐了很多.

我的问题是

  1. 自执行函数是否可重用?我的意思是这些是立即执行的,所以假设模块为给定的JSON文件绘制一个复杂的网格.那么我是否可以像jQuery插件一样为3个不同的JSON文件使用相同的自执行匿名函数?
  2. 当写入大量模块时,它们将在启动时自行执行.它会影响Ram/Processor的使用吗?难道不应该在需要时调用模块吗?自我执行有何意义?

我的项目范围:

请帮助我理解我的项目范围中的这个自我执行的东西,这是我的项目持有一个主命名空间说"Myapp",其模块如Myapp.moduleA,Myapp.moduleB.MyApp将触发其模块点击等. 什么是最好的方式去找我?

自我执行匿名函数

(function( skillet, $, undefined ) {
    //Private Property
    var isHot = true;

    //Public Property
    skillet.somevar = "Bacon Strips";

    //Public Method
    skillet.draw = function() {
        //Draw a grid
    };

    //Private Method
    function _grid(  ) {
        //
        }
    }   
}( window.skillet = window.skillet || {}, jQuery ));
Run Code Online (Sandbox Code Playgroud)

Ken*_*eth 2

您不能重用自执行函数,它只是立即执行,仅此而已。

如果需要多次执行,只需声明一个函数即可。

一种可能的方法是这样的:

var MYNAMESPACE.Object = (function(){
    // private methods
    var somemethod = function(){};

    // public methods
    return {
         somepublicmethod: function(){}
    };
})();
Run Code Online (Sandbox Code Playgroud)

现在你可以这样称呼它:

MYNAMESPACE.Object.somepublicmethod();
Run Code Online (Sandbox Code Playgroud)

至于启动时执行。如果您只创建方法并且不在声明中立即执行任何操作,则不会对性能产生太大影响,除非您有大量模块。如果是这种情况,您可能应该研究一下异步模块加载器模式(AMD)。RequireJS 就是一个很好的例子: http: //requirejs.org

我写了一篇关于 JS 命名空间的文章,您可能会感兴趣:

http://www.kenneth-truyers.net/2013/04/27/javascript-namespaces-and-modules/