Программно вызвать все функции в объекте? (Javascript) - PullRequest
0 голосов
/ 04 сентября 2018

Как гласит заголовок, есть ли способ программно вызвать все функции в объекте? Их не нужно вызывать в определенном порядке, и ни один из них не зависит друг от друга для какого-либо состояния и т. Д. То, что я первоначально попробовал, что казалось наиболее логичным (по крайней мере для меня), было

var object = {
    eventOne(){
        console.log("eventOne")
    },
    eventTwo(){
      console.log("eventTwo")
    },
    .......more events
}
//and then this for calling them
for(event in object){
  event();
}

но это просто заканчивается событием () - это не ошибка функции. На данный момент в объекте недостаточно событий, чтобы я был слишком обеспокоен и не просто вызывал их вручную, но скоро их будет около 20 или около того, и они должны быть зарегистрированы в нескольких местах, и мне также любопытно знаю, возможно ли это вообще:)

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

event - это имя свойства. Используйте object[propertyName]()

var object = {
    eventOne(){
        console.log("eventOne")
    },
    eventTwo(){
      console.log("eventTwo")
    }
}
//and then this for calling them
for(event in object){
 object[ event]();
}
0 голосов
/ 04 сентября 2018
Циклы

for..in повторяются по именам свойств , а не по значениям. Если некоторые из значений объекта являются функциями, и вы хотите вызывать эти функции, то вместо этого выполните итерацию по значениям и сначала убедитесь, что вы сделали проверку typeof, чтобы убедиться, что вы не вызываете функции:

var object = {
    eventOne(){
        console.log("eventOne")
    },
    eventTwo(){
      console.log("eventTwo")
    },
};
Object.values(object).forEach((val) => {
  if (typeof val === 'function') val();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...