Estoy aprendiendo decoradores, y aunque no he tenido buena suerte con los tutoriales, traté de hackear uno y obtuve esto:
function sum(...args) { return [...args].reduce((sum,a)=> sum + a, 0) } const decorate = (fn, callback) => (...args) => { callback(); return fn(...args); // Return the result of the executed function } const running = () => console.log('Running') const decoratedSum = decorate(sum, running) console.log(decoratedSum(1,2,3)) // 'Running' // 6Todavía tenía una publicación de tutorial abierta y en lugar de ejecutar la función usando f(arg) usan f.apply():
function sum(...args) { return [...args].reduce((sum,a)=> sum + a, 0) } const wrap = (fn, callback) => function(){ callback(); return fn.apply(this, arguments); } const running = () => console.log('Running') const wrappedSum = wrap(sum, running) console.log(wrappedSum(1,2,3)) // 'Running' // 6¿Hay alguna razón para no usar decorar() sobre envolver()?
Además, ¿alguien puede explicar qué está sucediendo realmente con fn.apply (esto, argumentos)?