Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Логирующий декоратор (1 аргумент)

Создайте декоратор makeLogging(f, log), которая берет функцию одного аргумента f и массив log. Она возвращает обертку, которая при каждом вызове записывает («логирует») аргументы в log.

У функции f может быть только один аргумент.

Работать должно так:

function work(a) { 
  /* ... */ // work - произвольная функция, один аргумент
}

function makeLogging(f, log) { /* ваш код */ }

var log = [];
work = makeLogging(work, log);

work(1); // 1, добавлено в log
work(5); // 5, добавлено в log

for(var i=0; i<log.length; i++) {
  alert( 'Лог:' + log[i] ); // "Лог:1", затем "Лог:5"
}

Решение
Решение

Возвратим декоратор wrapper который будет записывать аргумент в log и передавать вызов в f:

function work(a) { 
  /*...*/ // work - произвольная функция, один аргумент
}

function makeLogging(f, log) {

*!*
  function wrapper(a) {
    log.push(a);
    return f.call(this, a);   
  }
*/!*

  return wrapper;
}

var log = [];
work = makeLogging(work, log);

work(1); // 1
work(5); // 5

for(var i=0; i<log.length; i++) {
  alert( 'Лог:' + log[i] ); // "Лог:1", затем "Лог:5"
}

При вызове f.call на всякий случай передадем и this, ведь функция может быть вызвана и в контексте объекта.

#56
Наверх

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!