如何在同一个名称中创建两个不同的命名空间空间,避免覆盖第一个

how to create two different nameSpaces in one same nameSpace avoiding covering the first one?

本文关键字:命名空间 空间 第一个 覆盖 两个 同一个 创建      更新时间:2023-09-26

我想使用两个字符串(如果命名空间存在,我t know their content) to create two nameSpace.And i don不想创建一个新字符串。这是我的代码:

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;
}

问题是,如果我发送"myTest.myNameSpace"和"myTest.monaNameSpace"到这个函数中,它都会提醒"curSpace 未找到",当我发送"myTest.monaNameSpace"时,应该是"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);