Javascript 如何在同一名称空间中创建两个不同的名称空间,避免覆盖第一个名称空间?
我想使用两个字符串(我不知道它们的内容)来创建两个名称空间。如果名称空间存在,我不想创建一个新的名称空间。 这是我的密码:Javascript 如何在同一名称空间中创建两个不同的名称空间,避免覆盖第一个名称空间?,javascript,namespaces,Javascript,Namespaces,我想使用两个字符串(我不知道它们的内容)来创建两个名称空间。如果名称空间存在,我不想创建一个新的名称空间。 这是我的密码: function createNameSpace(nameSpace) { var spaceArr = nameSpace.split("."); var curSpace = window; //judge if this nameSpace exists. var i; for(i in spaceArr) {
function createNameSpace(nameSpace)
{
var spaceArr = nameSpace.split(".");
var curSpace = window;
//judge if this nameSpace exists.
var i;
for(i in spaceArr)
{
curSpace = curSpace[spaceArr[i]];
if(curSpace)
window.alert("nameSpace1:" + nameSpace + "\ncurSpace do exists:" + curSpace + "\ni:" + i + "\nspaceArr[i]:" + spaceArr[i] + "|");
else
{
curSpace = {};
window.alert("nameSpace1:" + nameSpace + "\ncurSpace not found:" + curSpace + "\ni:" + i + "\nspaceArr[i]:" + spaceArr[i] + "|");
break;
}
}
//now curSpace must have been created.
i++;
//window.alert("nameSpace2:" + nameSpace + "\ni:" + i + "\nspaceArr.length:" + spaceArr.length);
//create the nameSpace
for(;i < spaceArr.length; i++)
{
//window.alert("nameSpace2:" + nameSpace + "\ni:" + i + "\nspaceArr.length:" + spaceArr.length);
if(i == 0)
{
window[spaceArr[i]] = {};
curSpace = window[spaceArr[i]];
}
else
{
//window.alert("nameSpace3:" + nameSpace + "\ncurSpace[spaceArr[i]]:" + curSpace[spaceArr[i]]);
curSpace[spaceArr[i]] = {};
curSpace = curSpace[spaceArr[i]];
}
}
return curSpace;
}
函数createNameSpace(命名空间)
{
var spaceArr=nameSpace.split(“.”);
var curSpace=窗口;
//判断此命名空间是否存在。
var i;
对于(我在spaceArr中)
{
curSpace=curSpace[spaceArr[i]];
如果(游标空间)
window.alert(“nameSpace1:“+nameSpace+”\ncurSpace do exists:“+curSpace+”\ni:“+i+”\nspaceArr[i]:“+spaceArr[i]+“|”);
其他的
{
curSpace={};
window.alert(“nameSpace1:“+nameSpace+”\n未找到urspace:“+curSpace+”\ni:“+i+”\nspaceArr[i]:“+spaceArr[i]+”);
打破
}
}
//现在必须已经创建了curSpace。
i++;
//window.alert(“nameSpace2:+nameSpace+”\ni:+i+“\nspaceArr.length:+spaceArr.length”);
//创建名称空间
对于(;i
问题是,如果我将“myTest.myNameSpace”和“myTest.monaNameSpace”发送到此func中,当我发送“myTest.monaNameSpace”时,它会发出“curSpace not found”警报,该警报应为“curSpace do exists:”。我不知道错误在哪里,有人能告诉我吗?我觉得你的算法有点太复杂了。我对它进行了一些重构,添加了一个测试,并在控制台中验证了它的工作。我也写过几次这段代码,所以我很确定我已经达到了您的要求
function createNameSpace(nameSpace)
{
var spaceArr = nameSpace.split(".");
var curSpace = window;
//judge if this nameSpace exists.
var i = 0;
for(i = 0;i < spaceArr.length; i++)
{
var next = spaceArr[i];
console.log(curSpace, next);
if(curSpace[next] == undefined)
{
curSpace[next] = {};
curSpace = curSpace[next]
}
else
{
curSpace = curSpace[next];
}
}
return curSpace;
}
createNameSpace("myTest.myNameSpace");
console.log(myTest.myNameSpace);
myTest.myNameSpace.myName = "Leat Hakkor";
createNameSpace("myTest.monaNameSpace");
console.log(myTest.monaNameSpace);
console.log(myTest.myNameSpace.myName);
函数createNameSpace(命名空间)
{
var spaceArr=nameSpace.split(“.”);
var curSpace=窗口;
//判断此命名空间是否存在。
var i=0;
对于(i=0;i