在使用。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构建模块化开发过程解析