Задать вопрос
lightarhont
@lightarhont
python/php developer

Выполнить каждую функцию в массиве?

var cmeditbuttons = (function(){
     $('#saveitem').click(function(){
         $('#editform').submit();
        });
     $('#restoreitem').click(function(){
         $('#tablefunc').html(editrestore);
         prth_tips.init();
         cmvalidation.init();
         cmeditbuttons();
         cmformel();
         prth_chosen_select.init();
         cgstatus = 'Сброшена начальная копия данных!';
         $('.opstatus').html(cgstatus);
        });
    });


С учётом, того что будут анонимные функции. Что бы получилось как то так:

myfunc = [...список функций..., function(){cgstatus = 'Сброшена начальная копия данных!';}]
var cmeditbuttons = (function(funcs=myfuncs){
     $('#saveitem').click(function(){
         $('#editform').submit();
        });
     $('#restoreitem').click(function(){
         $('#tablefunc').html(editrestore);
         [перебор массива вручную или функцией с выполнением каждой]
         $('.opstatus').html(cgstatus);
        });
    });


На ум только приходит сделать функции строками и сделать eval для каждой. Только как быть с анонимной функцией тогда?
  • Вопрос задан
  • 2346 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@voidxnull
var functions = [ ... ];
for (var i = 0; i < functions.length; i++) {
  functions[i]();
}
//Или, если не нужен <IE9:
functions.forEach(function (fn) {
  fn();
});


Ответ написан
Пригласить эксперта
Ответы на вопрос 2
paradokso
@paradokso
Начинающий фронт-эндер
Вообще не понятно что вы хотите, но eval - не лучшая практика.
Может функции как методы объекта реализовать? И тогда делать перебор
Ответ написан
@dtestyk
Да нет же, их можно просто из массива вызывать:
var arrFunc = [
  function(){console.log("test2")},
  function(){console.log("test1")},
  alert.bind(window, "finish")
]

for(var i=0; i<arrFunc.length; i++){
  arrFunc[i]()
}

Но сразу замечу, особых причин так делать нет, если, конечно, список не динамический. Также существуют варианты решения для асинхронных вызовов и вызовов с задержками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы