只需使用一個循環,遍歷該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
感謝,這就像一個魅力! –