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(){}
}
})());

浙公网安备 33010602011771号