Повторяется история с замыканиями. Дошел до темы декораторы. В ходе чтения понял что вообше не понимаю что происходит. Прочитал тему. Перешел к задачам, и тут точно выяснилось что я ничего не понял.
С замыканиями я хоть понимал для чего они нужны, а декораторы...сути не доганяю.
В общем там есть решение задачи:
function work(a, b) {
alert( a + b ); // work - произвольная функция
}
function makeLogging(f, log) {
function wrapper() {
log.push([].slice.call(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++) {
var args = log[i]; // массив из аргументов i-го вызова
alert( 'Лог:' + args.join() ); // "Лог:1,2", "Лог:4,5"
}
Вот как работает этот декоратор?
function makeLogging(f, log) {
function wrapper() {
log.push([].slice.call(arguments));
return f.apply(this, arguments);
}
return wrapper;
}
Особенно не понятна строка : log.push([].slice.call(arguments));
Пожалуйста помогите разобраться, что к чему и как быть с этими декораторами.