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