深入理解JavaScript系列(47):对象创建模式(上篇)
介绍
本篇主要是介绍创建对象方面的模式,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码。
模式1:命名空间(namespace)
命名空间可以减少全局命名所需的数量,避免命名冲突或过度。一般我们在进行对象层级定义的时候,经常是这样的:
varapp=app||{}; app.moduleA=app.moduleA||{}; app.moduleA.subModule=app.moduleA.subModule||{}; app.moduleA.subModule.MethodA=function(){ console.log("printA"); }; app.moduleA.subModule.MethodB=function(){ console.log("printB"); };
如果层级很多的话,那就要一直这样继续下去,很是混乱。namespace模式就是为了解决这个问题而存在的,我们看代码:
//不安全,可能会覆盖已有的MYAPP对象 varMYAPP={}; //还好 if(typeofMYAPP==="undefined"){ varMYAPP={}; } //更简洁的方式 varMYAPP=MYAPP||{};
//定义通用方法 MYAPP.namespace=function(ns_string){ varparts=ns_string.split('.'), parent=MYAPP, i;
//默认如果第一个节点是MYAPP的话,就忽略掉,比如MYAPP.ModuleA if(parts[0]==="MYAPP"){ parts=parts.slice(1); }
for(i=0;i<parts.length;i+=1){ //如果属性不存在,就创建 if(typeofparent[parts[i]]==="undefined"){ parent[parts[i]]={}; } parent=parent[parts[i]]; } returnparent; };