function Sandbox(){
// 将arguments转化成array
var args = Array.prototype.slice.call(arguments)
// 取到最后一个参数:回调函数
var callback = args.pop();
// 依赖模块,模块可以作为一个数组传入,或者作为单独的参数传入
var modules = (args[0] && typeof args[0] === "string") ? args : args[0];
// 确保改函数作为构造函数被调用(是否使用new操作符,如果没有则再以构造函数的方式调用一次)
if(!(this instanceof Sandbox)){
return new Sandbox(modules,callback);
}
// 需要向this添加的属性
this.a = 1;
this.b = 2;
// 向该核心this对象添加模块,不指定模块名称或指定*表示使用所有模块
if(!modules || modules === "*"){
modules = [];
for(i in Sandbox.modules){
if(Sandbox.modules.hasOwnProperty(i)){
modules.push(i);
}
}
}
// 初始化模块
for(var i=0;i<modules.length;i++){
Sandbox.modules[modules[i]](this);
}
// call the callback
callback(this);
// 需要的任何原型属性
Sandbox.prototype = {
name : "My Application",
version : "1.0",
getName : function(){
return this.name;
}
}
}
解释在注释里
调用示例
Sandbox(['ajax','event'],function(box){
})
模块定义示例
Sandbox.modules = {}
Sandbox.modules.dom = function(box){
}