沙箱模式:原生JS实现模块依赖
沙箱模式:原生JS实现模块依赖
林落雨 发表于12个月前
沙箱模式:原生JS实现模块依赖
  • 发表于 12个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

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

}

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 13
码字总数 2308
×
林落雨
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: