我定义了一些简单的对象......
var objectOne = {
settings: {
name: "object one"
}
}
var objectTwo = {
settings: {
name: "object two"
}
}
现在让我们假装我从网址中的参数获得object
- 它以字符串形式出现......
var obj = "objectTwo";
如何使用此objectTwo.settings
变量访问obj
?
我无法执行以下操作,因为obj
是一个字符串:
var settings1 = obj.settings;
var settings2 = [obj].settings; // also doesn't work
我试图在没有任何运气的情况下剥离报价。
如何使用字符串访问顶级对象?
答案 0 :(得分:2)
window
是一个巧妙的技巧,但你可能会改变你的数据限制吗?
var objects = {
objectOne: {
settings: {
name: "object one"
}
},
objectTwo: {
settings: {
name: "object two"
}
}
}
var id = "objectOne";
alert(objects[id].settings.name);
答案 1 :(得分:1)
如果它在全局命名空间中,您可以使用window[obj].settings
。
如果没有,我认为除了评论中提到的@MikeC eval
之外,你可以做的很多,这很少是一个好主意。
答案 2 :(得分:1)
好问题。让我们发明一种Object方法来动态访问对象属性。 method2
无论您的财产位置有多深,它都需要一系列参数,并为您获得所需的价值;
在这种特殊情况下,它只是一个论点;
Object.prototype.getNestedValue()

您可以在here
看到Object.prototype.getNestedValue = function(...a) {
return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]];
};
var objects = {
objectOne: {
settings: {
name: "object one"
}
},
objectTwo: {
settings: {
name: "object two"
}
}
},
obj = "objectTwo";
result = objects.getNestedValue(obj);
console.log(JSON.stringify(result));
及其getNestedValue()
双胞胎setNestedValue()