不断往oNamespace内遍历匹配包名,使用临时变量inner保存oNamespace内部对象地址,按照包名修正内部对象。

function namespace(oNamespace, sPackage) {
    let arr = sPackage.split('.');
    let inner = oNamespace;

    for(let i=0, len = arr.length; i< len; i++){
        if(arr[i] in inner){
            if(!(inner[arr[i]] instanceof Object)){
                inner[arr[i]] = {};
            }
        } else {
            inner[arr[i]] = {};
        }
        inner = inner[arr[i]];// 内移
    }
    return oNamespace;
}