Задача на декоратор
Привет.
Есть такая задача и решение
Код:
//Создайте декоратор makeLogging(f, log), который берет функцию f и //массив log.
//Он должен возвращать обёртку вокруг f, которая при каждом вызове //записывает («логирует») аргументы в log, а затем передает вызов в f.
//В этой задаче можно считать, что функции 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"
*/!*
}
Решение
Код:
function makeLogging(f, log) {
function wrapper(a) {
log.push(a);
return f.call(this, a);
}
return wrapper;
}
Нашел другое решение, но не ясно толком, как оно работает
Код:
function makeLogging(f,log)
{
return function(){
log.push(arguments[0]);
return f.call(this,arguments[0]);
}
}
arguments здесь относиться к f - то есть arguments[0] равен принимаемому f параметру
work(1); - arguments[0]=1;
Так что ли?
|