天下之事,必先处之难,而后易之。

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");

 

 

 

posted @ 2012-05-27 16:13  boonya  阅读(374)  评论(0编辑  收藏  举报
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。