JS设计模式-模块模式

The Module Pattern

  Modules模块:

    这里文章中给出一个定义,模块为健壮架构中一个完整的部分,可以保持项目中单元的独立性和组织性。在业务中,主要对功能做出模块划分,当然对于纵向的架构,我们    也会分出一些模块,用来对业务做支撑。

  实现模块的方法:

    The Module Pattern//这里指的就是我们借助闭包特性进行模块化

    Object literal notation//字面值模块,最简单

    AMD modules//asynchoronous module definition.

      这种模块组织的方法执行顺序为先加载模块,加载完成后,回调函数开始执行。不会因为加载顺序不同步造成的运行时错误。签字require([modules],callback);

    CommonJs modules//

      这种方法实现模块的方法需要模块之间进行通信

      Math.js:Exports.add=function(){};

      increment.js:var add=require('Math').add;//require后会直接产生引用,然后调用其中的方法。

    ECMAScript modules//

      ECMAscript6也终于做出了原生的规范:

        引入模块中函数:import {privateVar,publicVar} from 'myModule'

        引入模块:import 'myMudle' as myModule

代码实现:

  1字面值实现,这种方法比较简单,也有书籍称之为门户大开型,借助字面值来实现

    var myModule={

      myProperty:"value",

      myConfig:{        

        useCaching:true,
        language:"en"

      },

      updateMyConfig:function(newConfig){

        if(typeof newConfig=='object'){

          this.myConfig=newConfig;

        }

      }

    }

    //这种模型实现时,还常常有prototype的使用,

    //例如function mySubModule()=function(){};

    //mySubModule.prototype=myModule;

    //这种设计通常是为了在构造函数内进行初始化

  2私有成员//借助函数作用于实现一个带有私有成员的模块,也可以称之为类

    var myModule=(function(){

      var privateAttr=0;

      var privateMethod=function(){};

      return{

        publicAttr:"I'm public",

        privateMethod:function(){}

      }

    })()//输入与输出直接在括号中填入参数,并在签名中增加接受变量即可。

    构造函数

    var myModule=(funciton(config){

      var constructor=(function(config){})();

      ......

    })(config)

  3这种模式使用过程中与普通函数式变量并无大的差别,如果要与其他框架配合使用,只需要当做普通变量来使用即可

  4最后记录一下jquery的模块加载,因为jquery在工作中使用的比较多

    function library(module){

      $(function(){

        if(module.init){

          module.init();

        }

      });

      return module;

    }

    var myLibrary=library((function(){

      return{

        init:function(){}

      }

    })());

 

    

posted @ 2014-07-21 14:47  Enterprise_  阅读(107)  评论(0)    收藏  举报