Documents‎ > ‎

자바스크립트와 네임스페이스

posted Jan 22, 2009, 7:48 PM by Unknown user   [ updated Feb 10, 2009, 4:17 PM ]
자바스크립트는 네임스페이스를 공식적으로 지원하지 않지만 아래의 코드를 가지고 간단히 처리 가능하다.

QJS = 
{
       
Namespace:
       
{
                make
: function (nsname)
               
{
                       
var w = nsname.split (".");
                       
var x;

                       
/*
                        for (var i = 0; i < w.length; i++)
                        {
                                if (i == 0) x = w[i];
                                else x = x + "." + w[i];
                                eval ("if (typeof " +  x + " == 'undefined') " + x + "= {};");
                        }

                        x = eval (nsname + ";");
                        */

       
                       
for (var i = 0; i < w.length; i++)
                       
{
                               
if (i == 0)
                               
{
                                        x
= eval ("if (typeof " +  w[i] + " == 'undefined') " + w[i] + "= {}; " + w[i] + ";");
                               
}
                               
else
                               
{
                                       
if (typeof x[w[i]] == 'undefined') x[w[i]] = {};
                                        x
= x[w[i]];
                                       
//x.name = w[i];
                               
}
                       
}

                       
return x;
               
},

                kill
: function (nsname)
               
{
                       
eval ("delete " + nsname + ";");
               
}

       
}
}


사용법은 간단하다.

QJS.Namespace.create ("net.abiyo.NS");
net.abiyo.NS.Test = { x: 10, y: 20 };


QJS.Namespace.kill ("net.abiyo.NS")는 편의를 위해 제공되나 네임스페이스에 대한 레퍼런스가 있는경우 완전히 없애지는 못한다.
var ns = QJS.Namespace.make ("net.abiyo.NS");
ns.Test = { x: 10, y: 20 };
QJS.Namespace.kill ("net.abiyo.NS");
alert (ns.Test.x);






Comments