清清爽爽
<!-- 填写标签 -->
<script type="text/javascript">
function namespace(oNamespace, sPackage) {
// 操作中转对象
let current = oNamespace;
// 以.拆分结构并循环遍历
sPackage.split(".").forEach(key => {
// 判断当前项是否存在,不存在则创建空对象{}
if(!current[key] || typeof current[key] !== 'object'){
current[key] = {}
}
// 每次循环完把current重置为当前对象
current = current[key]
})
return oNamespace;
}
</script>
过程详解
解析包名:sPackage.split(".")将包名 'a.b.c.d' 拆分成层级数组 ['a', 'b', 'c', 'd']
调用函数传入的对象为:{a: { test: 1, b: 2 }}, 第一次循环时current指向的是这个地址指针
第一次循环:
key = "a"
current["a"] 存在且为对象 { test: 1, b: 2 }。
重置指向 current = current["a"]进入到 下一次循环
第二次循环:
key = "b"
current["b"] 存在且为对象 b: 2 ,因为是非对象所以通过typeof current[key] !== 'object'j进入if条件重置b 为对象{}。
重置指向 current = current["b"]进入到 下一次循环
第三次循环:
key = "c"
current["c"] 存在且为上一次创建的空对象 {},此时对象中不存在 "c" 则又进入if条件创建空对象 {}。
重置指向 current = current["c"]进入到 下一次循环
第四次循环:
key = "d"
current["d"] 存在且为上一次创建的空对象 {},此时对象中不存在 "d" 则又进入if条件创建空对象 {}。
重置指向 current = current["d"]进入到 下一次循环



京公网安备 11010502036488号