我有一个JavaScript对象,定义如下
function MyObject () {
this.x = 10;
this.foo = {
x: 20
};
this.bar = {
baz: {
x: 30
}
}
}
我使用上述对象如下:
var n = new MyObject();
在我的代码中的某个时刻,我需要通过字符串引用上述对象的属性。这是一个例子
var s1 = 'x';
var result1 = n[s1]; // Works. result1 = 10.
var s2 = 'foo.x';
var result2 = n[s2] // Does not work, result2 = undefined. Was hoping result2 = 20.
var s3 = 'bar.baz.x';
var result3 = n[s3] // Does not work, result 3 = undefined. Was hoping result3 = 30.
正如您在上面的示例中所看到的,result2
和result3
将是undefined
,这正是我的期望,但不是我希望会发生的事情。我需要一种方法将字符串s2
和s3
转换为以下
var result2 = n['foo']['x'];
var result3 = n['bar']['baz']['x'];
请注意,我将s2
和s3
字符串拆分为数组变量。
一种方法是执行以下操作
var s2 = 'foo.x';
var s2Array = s2.split('.');
var result2 = n[s2Array[0]][s2Array[1]];
但我不认为这种方法非常可行,因为我不确定深字符串变量将是多少(例如,foo.x
或bar.baz.x
),以及我也想要一个适用于任何级别的通用解决方案(例如,解决方案也应该工作qux.quux.quuz.corge.grault.garply.waldo.x
)。
感谢。