码迷,mamicode.com
首页 > 其他好文 > 详细

最简单的模块管理工具

时间:2018-07-31 19:12:49      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:工具   调用   function   fun   run   nbsp   efi   UNC   循环   

<script>
    //模块管理工具,MyModules
    var MyModules = (function Manager() {
        var modules = {};    //创建一个空对象
        
        function define(name, deps, impl) {
        /*
            "data",[],function(){
                var name = "miku";
                function getName(){
                    return name;
                }
                return {
                    getName:getName
                }
        }
        1、首先name:‘date‘ deps:[] impl:fun() modules = {}
        2、for循环 由于deps.length为0,所以不循环
        3、modules[name] = impl.apply(impl, deps);
            (1) modules[‘date‘] = fn.apply(fn, deps);
            modules = {
                date:{
                    getName:getName
                }
            }
        */
        /*
        "app", ["data"], function(data){
            function run(){
                console.log(data.getName());
            }
            return {
                run:run
            }
        }
        1、首先name:‘app‘ deps:[‘date‘] impl:fn() 
            modules = {
                date:{
                    getName:getName
                }
            }
        2、for循环 deps.length = 1;
            当i = 0时,
            所以:[‘date‘][0] = modules[deps[0]] => modules[‘date‘] => {getName : getName}
                <=> date = {getName : getName}
            当i = 1时,
            1>1,不成立
        3、modules[name] = impl.apply(impl, deps);
            modules[‘app‘]  = fn().apply(fn(),[‘date‘]);
            modules = {
                date:{
                    getName:getName
                },
                app: {
                    run:run
                }
            }
            
        */
            for (var i=0; i<deps.length; i++){
                //将依赖的名字替换成已经注册了的模块
                deps[i] = modules[deps[i]];
            }
            //将依赖数组展开成参数传入模块的构建函数,生成新模块
            modules[name] = impl.apply(impl, deps);
        }
        
        function get(name){
            return modules[name];
        }
        function mod(){
            console.log( modules );
        }
        return {
            define: define,
            get: get,
            mod: mod
        }
    })();
    //定义一个模块,data
    MyModules.define("data",[],function(){
        var name = "miku";
        function getName(){
            return name;
        }
        return {
            getName:getName
        }
    });
    
    //定义一个模块,app
    //该模块依赖data模块
    
    MyModules.define("app", ["data"], function(obj){
        /*
            调用data对象的方法
        */
        function run(){
            console.log(obj.getName());
        }
        return {
            run:run
        }
    });
    //取出app模块
    var app = MyModules.get("app");
    //调用app模块的run方法
    MyModules.mod();//返回对象
    app.run();

这是我对这个模块的每一步的详解,

自己添加模块

<script>
    //模块管理工具,MyModules
    var MyModules = (function Manager() {
        var modules = {};    //创建一个空对象
        
        function define(name, deps, impl) {
        /*
            "data",[],function(){
                var name = "miku";
                function getName(){
                    return name;
                }
                return {
                    getName:getName
                }
        }
        1、首先name:‘date‘ deps:[] impl:fun() modules = {}
        2、for循环 由于deps.length为0,所以不循环
        3、modules[name] = impl.apply(impl, deps);
            (1) modules[‘date‘] = fn.apply(fn, deps);
            modules = {
                date:{
                    getName:getName
                }
            }
        */
        /*
        "app", ["data"], function(data){
            function run(){
                console.log(data.getName());
            }
            return {
                run:run
            }
        }
        1、首先name:‘app‘ deps:[‘date‘] impl:fn() 
            modules = {
                date:{
                    getName:getName
                }
            }
        2、for循环 deps.length = 1;
            当i = 0时,
            所以:[‘date‘][0] = modules[deps[0]] => modules[‘date‘] => {getName : getName}
                <=> date = {getName : getName}
            当i = 1时,
            1>1,不成立
        3、modules[name] = impl.apply(impl, deps);
            modules[‘app‘]  = fn().apply(fn(),[‘date‘]);
            modules = {
                date:{
                    getName:getName
                },
                app: {
                    run:run
                }
            }
            
        */
            for (var i=0; i<deps.length; i++){
                //将依赖的名字替换成已经注册了的模块
                deps[i] = modules[deps[i]];
            }
            //将依赖数组展开成参数传入模块的构建函数,生成新模块
            modules[name] = impl.apply(impl, deps);
        }
        
        function get(name){
            return modules[name];
        }
        function mod(){
            console.log( modules );
        }
        return {
            define: define,
            get: get,
            mod: mod
        }
    })();
    //定义一个模块,data
    MyModules.define("data",[],function(){
        var name = "miku";
        function getName(){
            return name;
        }
        return {
            getName:getName
        }
    });
    
    //定义一个模块,data2
    MyModules.define("data2",["data"],function(){
        var name = "klkx";
        function getName(){
            return name;
        }
        return {
            getName:getName
        }
    });

    //定义一个模块,app
    //该模块依赖data模块
    
    MyModules.define("app", ["data"], function(data){
        /*
            调用data对象的方法
        */
        function run(){
            console.log(data.getName());
        }
        return {
            run:run
        }
    });

    //定义一个模块,app2
    //该模块依赖data模块
    
    MyModules.define("app2", ["data2"], function(data){
        /*
            调用data对象的方法
        */
        function run(){
            console.log(data.getName());
        }
        return {
            run:run
        }
    });
    //取出app模块
    var app = MyModules.get("app");
    var app2 = MyModules.get("app2");
    //调用app模块的run方法
    MyModules.mod();//返回对象
    app.run();
    app2.run();
  </script>

 

最简单的模块管理工具

标签:工具   调用   function   fun   run   nbsp   efi   UNC   循环   

原文地址:https://www.cnblogs.com/jokes/p/9397223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!