JavaScript注册命名空间
前言:JavaScript中不存在命名空间的说法,但是我们也可以实现,来避免命名重复造成的困扰。
网上找了一些,下面给出注册命名空间的代码:
1、Ext的写法:
function registerNameSpace(ns){ if(typeof(ns)!="string")return; ns=ns.split("."); var o,ni; for(var i=0,len=ns.length;i<len,ni=ns[i];i++){ try{ o=(o?(o[ni]=o[ni]||{}):(eval(ni+"="+ni+"||{}"))); }catch(e){ o=eval(ni+"={}"); } } } //注册命名空间 registerNameSpace(“com.service.site”);
2、面向对象的写法:
/** * register nameSpace-------(1) */ registerNamespace = function(nsName) { var rootObject = window; var namespaceParts = nsName.split('.'); for (var i = 0;i < namespaceParts.length; i++) { var currentPart = namespaceParts[i]; if (!rootObject[currentPart]) { rootObject[currentPart] = new Object(); } rootObject = rootObject[currentPart]; } }; //注册命名空间 registerNamespace("Grandsoft.GEA"); registerNamespace("Grandsoft.GCM"); /** * register nameSpace-------(2) */ Namespace.register = function(fullNS) { // 将命名空间切成N部分, 比如Grandsoft、GEA等 var nsArray = fullNS.split('.'); var sEval = ""; var sNS = ""; for (var i = 0; i < nsArray.length; i++) { if (i != 0) sNS += "."; sNS += nsArray[i]; // 依次创建构造命名空间对象(假如不存在的话)的语句 // 比如先创建Grandsoft,然后创建Grandsoft.GEA,依次下去 sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"; } if (sEval != "") eval(sEval); }; //同上面(1)的效果一致 //Namespace.register("Grandsoft.GEA"); //Namespace.register("Grandsoft.GCM");
纸上得来终觉浅,绝知此事要躬行。