沙箱模式:原生JS实现模块依赖

    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){

}

 

转载于:https://my.oschina.net/u/3151109/blog/886892

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值