根据包名,在指定空间中创建对象
题目:
- 输入:namespace({a: {test: 1, b: 2}}, ‘a.b.c.d’)
- 输出:{a: {test: 1, b: {c: {d: {}}}}}
解答:
function namespace(oNamespace, sPackage) {
//将sPackage按.分割成数组:["a", "b", "c", "d"]
var arr = sPackage.split(".");
//循环这个数组,查找oNamespace里是否有相应的对象
for(var i=0;i<arr.length;i++){
//判断当其中的对象类型不为object的时候,就需要把这个对象变成{}
if(typeof oNamespace[arr[i]] !== 'object'){
oNamespace[arr[i]]={};
}
//当if判断对象类型是object的时候,不进入if里,直接到这句,oNamespace没有变化
//当判断对象类型不是object的时候,if里赋值后在这里把这个改变的对象赋给oNamespace更新它
//将当前对象的属性值变成下一个检测的对象
oNamespace = oNamespace[arr[i]];
}
//最后返回这个对象
return oNamespace;
}
namespace({a: {test: 1, b: 2}}, 'a.b.c.d');
知识点:split()函数、对象的应用