只需使用一个循环,遍历该names
并抓住当前的名字下一嵌套对象。假的值或数组的末尾应该停止循环。
var obj = options;
var i = 0;
while (obj && i < names.length)
obj = obj[names[i++]];
或者干脆用.reduce()
names.reduce(function(obj, name) {
return obj && obj[name];
}, options);
当然,您也可以命名,如果你喜欢重复使用的功能。
function toPropertyIn(obj, name) {
return obj && obj[name];
}
names.reduce(toPropertyIn, options);
要进行的getter/setter:
function nestedProp(obj, names, value) {
if (arguments.length > 1)
var setProp = names.pop();
var res = names.reduce(function(obj, name) {
return obj && obj[name];
}, options);
if (res && setProp !== undefined)
res[setProp] = value;
else
return res;
}
nestedProp(options, names, "foo"); // to set
var val = nestedProp(options, names); // to get
感谢,这就像一个魅力! –