Как задать пользовательское свойство функции через обертку(wrapper)? JavaScript

Есть некая функция sum(a, b). Через функцию обертку (wrapper(func)) хочу добавить начальной функции пользовательское свойство calls, пусть это будет условный массив. При добавлении этого свойства через func.calls или this.calls при вызове этого свойства выводит undefined. Почему так? Как задать это свойство через wrapper(func) правильно?

function sum(a, b) {
  alert(a + b);
}

function wrapper(func) {
  return function(a, b) {
    //func.calls = [1,2,3];
    this.calls = [1, 2, 3]
    func(a, b);
  };
}

sum = wrapper(sum);

console.log(sum.calls); //undefined


Ответы (1 шт):

Автор решения: EzioMercer

Можно сразу установить поля для func, которая приходит на вход и его же вернуть:

function sum(a, b) {
  console.log(a + b);
}

function wrapper(func) {
  func.calls = [1, 2, 3];
  
  return func;
}

sum = wrapper(sum);

console.log(sum.calls);
sum(1, 2);

→ Ссылка