динамически вызывать объект с подобъектами - PullRequest
1 голос
/ 09 августа 2011

Я новичок в объектах 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](), но теперь это многомерный ия понятия не имею, как мне это назвать.

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Тогда вам нужно применить некоторые сценарии.

// 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();
}
0 голосов
/ 09 августа 2011

Для многомерных различий нет, просто продолжайте добавлять квадратные скобки:

foo[myVar][myvar2]()

Редактировать: Неважно, неправильно понял вопрос, который ироничен, потому что я фактически задал почти точно этот вопрос!

В javascript, как я могу динамически получить вложенное свойство объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...