Создайте декоратор makeLogging(func, log), которая берет функцию func и возвращает обертку, которая при каждом вызове добавляет аргументы arguments в массив log.
Условие аналогично задаче Логирующий декоратор (1 аргумент), но допускается func с любым набором аргументов.
Работать должно так:
function work(a, b) {
alert(a + b); // work - произвольная функция
}
function makeLogging(f, log) { /* ваш код */ }
var log = [];
work = makeLogging(work, log);
work(1, 2); // 3
work(4, 5); // 9
for(var i=0; i<log.length; i++) {
alert( 'Лог:' + [].join.call(log[i]) ); // "Лог:1,2", "Лог:4,5"
}
Решение
Решение
Решение аналогично задаче Логирующий декоратор (1 аргумент), разница в том, что в в лог вместо одного аргумента идет весь объект arguments.
Для передачи вызова с произвольным количеством аргументов используем f.apply(this, arguments).
function work(a, b) {
alert(a + b); // work - произвольная функция
}
function makeLogging(f, log) {
*!*
function wrapper() {
log.push(arguments);
return f.apply(this, arguments);
}
*/!*
return wrapper;
}
var log = [];
work = makeLogging(work, log);
work(1, 2); // 3
work(4, 5); // 9
for(var i=0; i<log.length; i++) {
alert( 'Лог:' + [].join.call(log[i]) ); // "Лог:1,2", "Лог:4,5"
}
#344