Вызовите каждую функцию в буквальном объекте (Javascript) - PullRequest
2 голосов
/ 01 февраля 2011

Как я могу вызвать каждую функцию в этом объекте?

var obj = {
  hey1: function() {
    alert('hey');
  },
  hey2: function() {
    alert('hey2');
  },
  hey3: function() {
    alert('hey3');
  }
}

Я бы хотел, чтобы каждая функция запускалась одна за другой. Я ищу что-то вроде:

for (var hey in obj) {
  hey();
}

Но очевидно, что это не работает (иначе я бы не задавал этот вопрос).

Спасибо, ребята !!!

Ответы [ 2 ]

7 голосов
/ 01 февраля 2011
for (var hey in obj) {
    obj[hey]();
}

В ситуации, когда не гарантируется, что каждое свойство будет функцией, вы можете отсеять другие свойства:

for (var hey in obj) {
    if (typeof obj[hey] == "function") {
        obj[hey]();
    }
}

Чтобы дополнительно ограничить его только непосредственными свойствами объекта (а не те, что унаследованы от его прототипа):

for (var hey in obj) {
    if (typeof obj[hey] == "function" && obj.hasOwnProperty(hey)) {
        obj[hey]();
    }
}
2 голосов
/ 01 февраля 2011

Lopping даст вам ключи, а не значения.Используйте ключ для получения значения:

for (var hey in obj) {
  obj[hey]();
}

jsfiddle.net / s8tbr /

Примечание. В зависимости от того, откуда вы получаете объект, вы можете захотетьпроверьте, что свойства являются членами самого объекта, а не унаследованы от прототипа:

for (var hey in obj) {
  if (obj.hasOwnProperty(hey)) {
    obj[hey]();
  }
}
...