Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Design Patterns_Architecture - Fatal编程技术网

组织javascript插件代码的最佳方法

组织javascript插件代码的最佳方法,javascript,design-patterns,architecture,Javascript,Design Patterns,Architecture,哦,嗨, 我看到了一些关于这个主题的有趣帖子,但我认为这是一个非常私人的问题,需要定制答案。所以我想问你,对于一个需要更加通畅的Javascript插件,组织代码的最佳方式是什么 因此,我的代码如下所示: var myApp = (function(){ //here are my global methods or variables var self = this; return { method1:functi

哦,嗨, 我看到了一些关于这个主题的有趣帖子,但我认为这是一个非常私人的问题,需要定制答案。所以我想问你,对于一个需要更加通畅的Javascript插件,组织代码的最佳方式是什么

因此,我的代码如下所示:

    var myApp = (function(){
        //here are my global methods or variables
        var self = this;
        return {
            method1:function(){}
            method2:function(){}
            method3:function(){}
    }

   })() || (myApp = {})
myApp.method1();
我执行调用或使用我的应用程序的整个代码的方法1。 我想我可以用addEventListener方法添加和加载事件来执行这个方法1,我想我的代码可以有更好的组织。
我想确切地说,我的插件有点小,比如200行javascript代码,它必须是香草js。它只在网站的一个页面上使用,在我看来,不需要使用名为“new”的原型类。

这实际上取决于您的项目和您试图获得的内容。 有几种模式可以帮助您更好地组织和维护代码。
例如,我使用了多年来让自己感到舒适的多种模式组合。
这是我的应用程序模块的样板文件:

;(function(global, udnefined){

    var app = global.app || {},
        moduleName = 'util',
        module = app[moduleName] || {};

    // "private" vars
    var version = "1.2";

    // fake "private" members (the udnerscore naming convention)
    module._bindEventHandlers = function(){
        // code here

        // for chainability purposes
        return this;
    }

    // "public" method
    module.someMethod = function(){


        // for chainability purposes
        return this;
    }

    // "public" method
    module.someOtherMethod = function(){


        // for chainability purposes
        return this;
    }

    // the init method
    module.init = function(){
        this
            ._bindEventHandlers()
            .someMethod();
    }

    app[moduleName] = module;
    global.app = app;

})(this);
然后,在您的应用程序中(在应用程序初始化中或在您实际需要模块时),您只需调用:

app.util.init();
app.util.someOtherMethod();

所提供的模块在创建新模块时具有高度可重用性,因为大多数模块都应该具有初始化逻辑(
init
方法),大多数模块都会侦听一些事件(无论是dom还是自定义事件)
\u bindEventHandlers
方法,并且不会用变量污染全局命名空间(它只是在主应用程序中添加了一个对象)。

我在这行中使用了一些东西。所有这些都取决于我需要做什么

(function(app, undefined){ 
  var module = app.module = (function(){
    var privatestuff

    return {}
  }())

  var singelton = app.singleton = (function(){
    var Module = function(){}

    module.prototype.method1 = function(){}

    return new Module()
  }())

  var ModulePrototype = app.ModulePrototype = function(){
    var Module = function(){}

    module.prototype.method1 = function(){}

    return Module
  }
}(myApp = window.myApp ||{}))