命名空间模式
使用一个全局的对象变量来作为所有模块的顶级父属性,所有的子模块都他的属性。
var MYAPP = MYAPP || {}
var MYAPP.modules = {}
MYAPP.modules.dom = {}
MYAPP.modules.event = {}
我们也可以使用通用的命名方法去执行变量的命名初始化;
var ajax = namespace('MYAPP.modules.ajax');
模块模式
该模式提供了一种创建自包含非耦合代码片的有利工具,可以将它视为黑盒功能,可以根据软件的需求去自定义添加和删除你的模块。
命名初始化代码如上:
MYAPP.utities.array = (function () {
var uobj = MYAPP.utilities.object,
ulang = MYAPP.utilities.lang;
array_string = '[object Array]',
ops = Object.prototype.toString;
return {
inArray:function () {
},
isArray:function () {
}
}
}());
沙箱模式
该模式提供了一种可以解决命名空间模式带来的全局变量命名的问题,其提供了模块运行的环境,且各个模块之间的运行不会相互影响。
function Sandbox () {
var args = Array.prototype.slice.call(arguments),
callback = args.pop(),
modules = (!args[0] && args[0] === 'string') ? args : args[0],
i;
if(!(this instanceof Sandbox)){
return new Sandbox(args,callback);
}
this.a = 1;
this.b = 2;
if(!modules || modules === '*'){
modules = [];
for(i in Sandbox.modules){
if(Sandbox.modules.hasOwnProperty(i))
modules[i] = Sandbox.modules[I];
}
}
for(i = 0;i < modules.length;i++){
Sandbox.modules[modules[I]](this);
}
callback(this);
}
Sandbox.prototype = {
name:'My Application',
version:'1.0',
getName:function () {
return this.name;
}
};