javascript构建模块化开发过程解析

  

在使用。js,要求。js,棱角分明的时候。

  

我们使用到定义、模块(需要)的方式,定义模块,和依赖模块

  

下面给出定义和模块的简单实现。其本质,就是往一个对象上面添加方法

        var F={};   fn F.define=函数(str) {   var=str.split部分(“。”);   父母var=;//父当前模块的父模块   var=len=0;//如果第一个模块是模块单体对象,则移除   如果[0]==癋”(部分){   部分=parts.slice (1);   }//屏蔽对定义模块模块方法重写   如果(部分[0]==岸ㄒ濉眧 |部分[0]==澳?椤?{   返回;   }      (len=parts.length;我& lt;len-1;我+ +){//如果父模块中不存在当前模块   如果父母(typeof(部分[我]]===岸ㄒ濉?{//声明当前模块   父母(部分[我]]={};   }//缓存下一层父模块   父母=父母[[我]]部分;   }      如果(fn,,部分[我]){//如果给定模块方法,则绑定该模块的方法,   父母[[我]]部分=fn ();   }   返回;   }      F。模块=function () {   var args=[] .slice.call(论点);//复制参数   var fn=args.pop ();//获取回调      var=args[0]部分,,args[0]数组运算符& # 63;args[0]:参数;//模块的依赖   var模块=[];//模块的路由   var modIDs=" ";//依赖模块的索引   var=0;      var len=parts.length;//依赖模块的长度      var家长,j, jlen;//父级模块,模块路由层级索引,模块路由层级长度      虽然(我& lt;len) {   如果(typeof部分[我]==白址?{   父母=;//解析路由,并且屏蔽掉F   [我].replace modIDs=部分(F/^ \。/? .split (“。”);//遍历模块层级   (j=0, jlen=modIDs.length;j & lt;jlen;j + +) {//迭代父模块   父母=父母[modIDs [j]] | |假;   }   modules.push(父);//将模块添加到依赖列表   其他}{//直接将模块添加到依赖列表   [我]modules.push(部分);   }//取下一个模块   我+ +;   }//执行回调,将依赖的模块注入   fn.apply (null,模块);   }//定义字符串模块   F.define(“字符串”,函数(){   返回{   削减(str) {   返回str.replace (/^ s + | \ s + $/g, " ");   }   }   });//定义字符串模块,的子模块子   F.define (“string.sub函数(){   返回{   低(str) {   返回str.toLowerCase ();   }   }   });   console.log (F);//使用模块   F.module ([“string”、“string.sub”、文档),函数(str, strSub doc) {   console.log (str, strSub doc)   });      

当然了,这里使用的,F对象,实际应用中,应该写在闭包里面。不能让外界直接访问,于是有如下代码。

        海var=(函数(){   var F={};   fn F.define=函数(str) {   var=str.split部分(“。”);   父母var=;//父当前模块的父模块   var=len=0;//如果第一个模块是模块单体对象,则移除   如果[0]==癋”(部分){   部分=parts.slice (1);   }//屏蔽对定义模块模块方法重写   如果(部分[0]==岸ㄒ濉眧 |部分[0]==澳?椤?{   返回;   }      (len=parts.length;我& lt;len-1;我+ +){//如果父模块中不存在当前模块   如果父母(typeof(部分[我]]===岸ㄒ濉?{//声明当前模块   父母(部分[我]]={};   }//缓存下一层父模块   父母=父母[[我]]部分;   }      如果(fn,,部分[我]){//如果给定模块方法,则绑定该模块的方法,   父母[[我]]部分=fn ();   }   返回;   }      F。模块=function () {   var args=[] .slice.call(论点);//复制参数   var fn=args.pop ();//获取回调      var=args[0]部分,,args[0]数组运算符& # 63;args[0]:参数;//模块的依赖   var模块=[];//模块的路由   var modIDs=" ";//依赖模块的索引   var=0;      var len=parts.length;//依赖模块的长度      var家长,j, jlen;//父级模块,模块路由层级索引,模块路由层级长度      虽然(我& lt;len) {   如果(typeof部分[我]==白址?{   父母=;//解析路由,并且屏蔽掉F   [我].replace modIDs=部分(F/^ \。/? .split (“。”);//遍历模块层级   (j=0, jlen=modIDs.length;j & lt;jlen;j + +) {//迭代父模块   父母=父母[modIDs [j]] | |假;   }   modules.push(父);//将模块添加到依赖列表   其他}{//直接将模块添加到依赖列表   [我]modules.push(部分);   }//取下一个模块   我+ +;   }//执行回调,将依赖的模块注入   fn.apply (null,模块);   }   返回{   定义:函数(){   F.define.apply (F,参数);   },   模块:功能(){   F.module.apply (F,参数);   }   }   }) ();//定义字符串模块   Sea.define(“字符串”,函数(){   返回{   削减(str) {   返回str.replace (/^ s + | \ s + $/g, " ");   }   }   });//定义字符串模块,的子模块子   Sea.define (“string.sub函数(){   返回{   低(str) {   返回str.toLowerCase ();   }   }   });   console.log(海);//使用模块   Sea.module ([“string”、“string.sub”、文档),函数(str, strSub doc) {   console.log (str, strSub doc)   });

javascript构建模块化开发过程解析