function namespace(oNamespace, sPackage) { if(!(sPackage instanceof Array)){ var keys = sPackage.split(".") } var tmpNamespace = oNamespace for (let index in keys) { const key = keys[index] console.log(oNamespace) console.log(tmpNamespace) if(!tmpNamespace[key]){ tmpNamespace[key] = {} } tmpNamespace = tmpNamespace[key] } }js中的浅拷贝可以操作地址从而改变变量的值
function namespace(oNamespace, sPackage) { sPackage = sPackage.split('.') let key = sPackage.shift() // 每次都获得第一个key if (!key) { // 当获得的key为空时,即为终止条件 return } if (!oNamespace.hasOwnProperty(key)) { // 如果不存在该属性,则创建 oNamespace[key] = {} } namespace(oNamespace[key], sPackage.join('.')) // 递归 return oNamespace }
function namespace(oNamespace, sPackage) { if (sPackage.length > 1) { sPackage = sPackage.split('.'); var obj = oNamespace; for (let i = 0; i < sPackage.length; i++) { obj = namespace(obj, sPackage[i]); }; return oNamespace; }; if (!oNamespace[sPackage] || oNamespace[sPackage] instanceof Array || typeof oNamespace[sPackage] != 'object') { oNamespace[sPackage] = {}; }; return oNamespace[sPackage]; };
if (!ns[scope[i]] ...) {...} if (!(scope[i] in ns) ...) {...} if (typeof ns[scope[i]] != 'object' ...) {...} if (!(ns[scope[i]] instanceof Object) ...) {...}
function isPlainObject(value) { return Object.prototype.toString.call(value).slice(8, -1) == 'Object'; } function namespace(oNamespace, sPackage) { var scope = sPackage.split('.'); var ns = oNamespace; for (var i = 0; i < scope.length; ++i) { if (!ns.hasOwnProperty(scope[i]) || !isPlainObject(ns[scope[i]])) { ns[scope[i]] = {}; } ns = ns[scope[i]]; } return oNamespace; }