前言: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");