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