@WebNerd
It's time to hunt

Зачем в функции декораторе используется func.apply(this, args)?

Прохожу тему Apply, call и не могу понять, зачем в функции декораторе spy используется вызов функции func c привязкой контекста. func.apply(this,args). Ведь можно написать просто func(...args) и все будет работать. Можете проверить. п.с Я знаю для чего используют привязку контектста, когда передается метод объекта. Но здесь же просто функция.

function work(a, b) {
  console.log (a + b ); // произвольная функция или метод
}

function spy(func) {

  function wrapper(...args) {
    wrapper.calls.push(args);
    return func.apply(this, args); // МЕСТО О КОТОРОМ Я СПРАШИВАЮ. Если заменить на func(...args) ничего не поменяется. От того и вопрос, зачем здесь Apply.
  }

  wrapper.calls = [];

  return wrapper;
}


work = spy(work);

work(1, 2); 
work(4, 5); // 9

for (let args of work.calls) {
  console.log( 'call:' + args.join() );
}
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Но здесь же просто функция.


"просто функцию" можно вызвать, передав ей некоторый this
work.call(obj, 1, 2);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы