js模块化开发

  JS模块化开发                

          Javascript社区做了很多努力,在现有的运行环境中,实现"模块"的效果。本文总结了当前"Javascript模块化编程"的最佳实践,说明如何投入实用。

一 js模块化原理

 

(1)原始写法 :相同功能的放到一起

          

function m1(){
     ...
}
function m2(){
     ...
}

 

 

(2)对象写法

 

var  model = new Object({
          _count : 1;
          m1 : function(){
             
           }
          m2 : function(){
         
         }
});

 

 

(3)立即执行函数写法

 

var model = (function(){
               var count = 1;
               var m1 = function(){
                      return count;
               };
               var m2 = function(aa){
                      count = aa;
               };
               return {
                      m1 : m1,          
                      m2 : m2
                      };
})();
//调用方式
model.count; //undefined
model.m1(); //1
model.m2("aa");
model.m1(); //aa

 

 

(4)放大模块

 

var model = (function(){
               var count = 1;
               var m1 = function(){
                      return count;
               };
               var m2 = function(aa){
                      count = aa;
               };
               return {
                      m1 : m1,          
                      m2 : m2};
})();
 var model = (function(mod){
              mod.m3 = function(){
                       mod.m2(mod.m1()+1);
             };
             return mod;
})(model);
//调用方式
model.m3();
model.m1();//2

 

 

(5)宽放大模块      // 函数立即执行 参数可以为空对象

 

 var cc = (function(mod){
              mod.m3 = function(){
                       alert("dd");
             };
              return mod;
})(cc||{});

 (6)将全局变量引入模块

 

 

var model = (function($){
               ....
})(jquery);

 二 、AMD /CMD的区别

 

   先说 RequireJS/seaJS 是一个前端的模块化管理的工具库

     AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。

    CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
 1.模块化定义的规范不同,AMD推崇依赖前置,CMD推崇依赖就近。
2. 虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS 的作者默认是最    喜欢上面的写法,也是官方文档里默认的模块定义写法。   

3. AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。

AMD规范

requiredJs模块定义  

 

  1. define('name',[ 'module1', 'module2' ], function(m1, m2){
        ...
    });//模块的名字是文件的名字 也可以取名字 function 里的值对应前面的依赖返回
     

requiredJs调用:

 

require( ['foo', 'bar'], function( foo, bar ){
    foo.func();
    bar.func();
} );

 

CMD规范

seajs模块定义

 

define( 'module', ['module1', 'module2'], function( require, exports, module ){
    // 模块代码
} );  // 模块id,依赖模块,函数(require,输出,被扩展的)
require 是 factory 的第一个参数。   require( id );  接受模块标识作为唯一的参数,用来获取其他模块提供的接口; equire.async( id, callback? ); require是同步往下执行的,需要的异步加载模块可以使用 require.async 来进行加载;
 exports 是 factory 的第二个参数,用来向外提供模块接口。
module 是factory的第三个参数,为一个对象,上面存储了一些与当前模块相关联的属性与方法。
        module.id 为模块的唯一标识。
        module.uri 根据模块系统的路径解析规则得到模块的绝对路径。
        module.dependencies 表示模块的依赖。
        module.exports 当前模块对外提供的接口。
参考链接 http://blog.chinaunix.net/uid-26672038-id-4112229.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值