Показать сообщение отдельно
  #1 (permalink)  
Старый 28.09.2012, 18:34
Интересующийся
Отправить личное сообщение для gh321 Посмотреть профиль Найти все сообщения от gh321
 
Регистрация: 14.02.2011
Сообщений: 23

Задача на декоратор
Привет.
Есть такая задача и решение
Код:
//Создайте декоратор 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;
Так что ли?
Ответить с цитированием