用子对象动态调用对象

时间:2011-08-09 09:54:52

标签: javascript object

我是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.barr1bar2或提及任何其他上述对象。 foo不会成为myVar的一部分,因为它对每次通话都很常见。一种可能的解决方案是使用eval但我想尽可能避免使用它。

如果对象是一维的,我会使用foo[myVar](),但这现在是多维的,我不知道应该怎么称呼它。

2 个答案:

答案 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