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 在推广过程中对模块定义的规范化产出。
3. AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。
AMD规范
requiredJs模块定义
-
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,输出,被扩展的)
本文介绍JavaScript模块化的多种实现方式,包括原始写法、对象写法、立即执行函数写法等,并对比了AMD与CMD两种模块加载规范的不同。
1178

被折叠的 条评论
为什么被折叠?



