有没有办法在构造后自动创建一个子对象,即
var obj = {};
obj.a.b.c=13;
上面给我一个“obj.a is undefined”错误
我写了一个函数来做这个,但想知道是否有更简单的方法
_setObjectProperty(obj,13,['a','b','c']);
function _setObjectProperty(obj,value,loc)
{
if(loc.length>1) {
obj[loc[0]] = obj[loc[0]] || {};
_setObjectProperty(obj[loc[0]],value,loc.splice(1));
}
else if(loc.length===1) {
obj[loc[0]]=value;
}
}
答案 0 :(得分:8)
不,在JavaScript中没有内置的方法可以做到这一点。唯一的方法是像你一样创建自己的功能。如果您想要点操作符/符号的便利性,可以使用以下功能:
var set = function(path, value, root) {
var segments = path.split('.'),
cursor = root || window,
segment,
i;
for (i = 0; i < segments.length - 1; ++i) {
segment = segments[i];
cursor = cursor[segment] = cursor[segment] || {};
}
return cursor[segments[i]] = value;
};
set("a.b.c", 2);
console.log(a.b.c) // => 2