简单模拟js的模块化依赖

为了使得js代码更加规划,以及更加有结构感。很多大神就开发了一套又一套的js库。比如requireJs, commonJs, seajs等。

模块化主要分为AMD以及CMD 2种类型,具体什么含义呢,可以自行百度一下了解,我主要是花费一点时间,模拟一下js的模块化依赖实现。

(function(global){
            //缓存 所有的模块
            var modules = new Object();
            //模块方法的定义实现
            var defined = function(moduleName, dependNames, moduleFn){
                if(isArray(dependNames)){
                    var dependModules = resolveDepend(dependNames);
                    if(dependModules != undefined){
                        modules[moduleName] = moduleFn.apply(undefined, dependModules);
                    }
                }else{
                    modules[moduleName] = dependNames.apply(undefined);
                }

            };

            //调用模块方法
            var use = function(dependNames, fn){
                var dependModules = resolveDepend(dependNames);
                if(dependModules != undefined){
                    fn.apply(undefined, dependModules);
                }
            };
            var resolveDepend = function(dependNames){
                var dependModules = new Array();
                for(var d in dependNames){
                    var module = modules[dependNames[d]];
                    if(module == undefined){
                        console.error("Not Found " + dependNames[d]);
                        return ;
                    }
                    dependModules.push(module);
                }
                return dependModules;
            }

            //采用闭包形式, 判断类型方法调用
            var typeOf = function(){
                var a = Object.prototype.toString;
                return function(o){
                    return a.call(o);
                }
            }();

            //判断是否是一个数组
            var isArray = function(a){
                var typeStr = typeOf(a);
                return typeStr == "[object Array]" ? true : false;
            }

            /**对外暴露接口**/
            global.defined = defined;
            global.use = use;
    })(window);

    defined("D", function(){
        return function(a, b){
            return a + b ;
        };
    });

    defined("C", function(){
        return function(a, b){
            return a - b;
        }
    });

    defined("B", ["D"], function(D){
        return function(a, b){
            return D(a, b);
        };
    });


    defined("A", ["B", "C"],function(B, C){
        return function(a, b, c, d){
            return B(B(a, b), C(c, d))
        }
    });

    use(["A"], function(A){ 
        console.info(A(1, 2, 4, 3));
    });
    </script>

这里只是简单的模拟,真正要达到模块化框架,还有很多东西需要编写,比如异步加载js等。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值