(function ()
{
var namespaceArray = [];
function namespaceObject(name, fullName)
{
this.fullName = fullName;
this.name = name;
};
var namespaceManager =
{
namespaces: namespaceArray
, global: this
};
function using(namespace, action)
{
if (!namespace) throw new Error('namespace 不允许为空。');
else if (typeof (namespace) != "string") throw new Error('namespace 只能为字符串形式。');
else if (namespace.charAt(0) == '.' || namespace.charAt(namespace.length - 1) == '.' || namespace.indexOf("..") != -1)
{
throw new Error("非法的命名空间:" + namespace + "。 ");
}
var parentNS = namespaceArray[namespace];
if (!parentNS)
{
var nss = namespace.split('.'); //- 拆分 namespace
var parentNS = namespaceManager.global; //- 假定上级为全局命名空间
var fullName;
for (var i = 0; i < nss.length; i++)
{
var ns = nss[i];
if (!fullName) fullName = ns;
else fullName = fullName + "." + ns;
var nsObject = parentNS[ns];
if (!nsObject)
{
nsObject = new namespaceObject(name, fullName);
parentNS[ns] = nsObject;
}
else if (typeof nsObject != "object") throw new Error(nss.slice(0, i).join('.') + " 非 object 类型的命名空间。");
else nsObject = parentNS[ns];
parentNS = nsObject;
}
namespaceArray[namespace] = parentNS;
}
if (typeof action == "function")
{
action.call(parentNS);
}
if (parentNS !== namespaceManager.global)
{
for (var i in parentNS)
{
if (!namespaceManager.global[i])
namespaceManager.global[i] = parentNS[i];
}
}
return parentNS;
};
function clearUsing(namespace)
{
var parentNS = namespaceArray[namespace];
if (parentNS)
{
for (var i in parentNS)
{
if (i == "name" || i == "fullName" || typeof parentNS[i] == "namespaceObject") continue;
if (namespaceManager.global[i])
{
delete namespaceManager.global[i];
}
}
}
}
window.using = using;
window.clearUsing = clearUsing;
window.namespaceManager = namespaceManager;
using("Sofire.Test", function ()
{
this.HelloClass = function ()
{
this.Name = "hello";
};
});
alert(HelloClass);
clearUsing("Sofire.Test");
if (typeof HelloClass != "undefined")
{
alert("Exits");
}
else alert("Not Exits");
using("Sofire.Test", function ()
{
this.HelloClass2 = function ()
{
this.Name2 = "hello2";
}
});
alert(HelloClass);
alert(HelloClass2);
})();
转载于:https://www.cnblogs.com/sofire/archive/2011/05/04/2036021.html