我是JS对象的新手。我有这样的代码
var foo = {
bar0: {
barr0: function() {//doo stuff}
barr1: function() {//doo stuff}
},
bar1: {
barr0: function() {//do stuff}
barr1: function() {//do stuff}
},
bar2: function() {//do stuff}
}
现在我有了这个变量myVar
,它以所调用的格式保存上述任何一个的“名称”。比如它可以有bar0.barr1
或bar2
或提及任何其他上述对象。 foo
不会成为myVar
的一部分,因为它对每次通话都很常见。一种可能的解决方案是使用eval
但我想尽可能避免使用它。
如果对象是一维的,我会使用foo[myVar]()
,但这现在是多维的,我不知道应该怎么称呼它。
答案 0 :(得分:2)
然后你需要应用一些脚本。
// define our access string and copy a reference from foo into level
var myVar = 'bar0.barr1',
level = foo;
// split that access string into an Array (splitted by dots) and loop over it
myVar.split(/\./).forEach(function( prop ) {
// if the property name ("bar0", "barr1") is available in our target object
if( prop in level ) {
// overwrite our level variable with the new object property reference, so somekind "climb up" the latter if we're dealing with nested objects
level = level[ prop ];
}
});
// if we're done, check if level holds a function reference and if so, execute it.
if( typeof level === 'function' ) {
level();
}
答案 1 :(得分:0)
多维没有区别,只需继续添加方括号:
foo[myVar][myvar2]()
编辑:没关系,误解了这个问题,这很具有讽刺意味,因为我实际上几乎问了这个问题!
In javascript how can I dynamically get a nested property of an object