Tengo un objeto con un método que quiero pasar a una función especial. El trabajo de esta función especial es llamar a la función pasada como argumento y también guardar todos los argumentos pasados a la función ejecutada/devuelta/llamada a una variable externa.
const playerPerformance = { goals: 18, assists: 19, total(penalties, tackles) { return this.goals + this.assists + penalties + tackles; }, }; const calls = []; function saveCalls(func) { return withMemory = (...rest) => { calls.push(rest); return func(...rest); }; }; const tester = saveCalls(playerPerformance.total); El problema es que no se como guardar el contexto de la función pasada. Debe hacerse dentro de la función saveCalls , no como este const tester = saveCalls(playerPerformance.total.bind(playerPerformance); . Traté de aplicar los métodos bind(), call(), apply() dentro saveCalls pero esto no funciona Por aquí.
El resultado actual:
tester(2,1) // NaN ...lo cual es comprensible ya que pierdo un contexto y obtengo undefined + undefined + 2 + 1
El resultado deseado después de este cambio de código:
tester(2,1) // 40Simplemente haga una función contenedora, que haga que this argumento sea correcto para total . El método bind está diseñado para esto:
const tester = saveCalls(playerPerformance.total.bind(playerPerformance));