Estoy tratando de aprender decoradores en javascript con la ayuda de este artículo: https://dev.to/logrocket/understanding-javascript-decorators-ba2 .
Mis preguntas son:
Validator podamos leer argumentos de la función Multiply ?Multiply no están definidos antes de la return function(...args) dentro de la función Validator ?Aquí está el código:
let Multiply = (...args) => { return args.reduce((a, b) => a * b) } // validated integers const Validator = (fn) => { return function(...args) { const validArgs = args.every(arg => Number.isInteger(arg)); if (!validArgs) { throw new TypeError('Argument cannot be a non-integer'); } return fn(...args); } } //decorated multiply function that only multiplies integers MultiplyValidArgs = Validator(Multiply); MultiplyValidArgs(6, 8, 2, 10);El validador crea y devuelve una nueva función (especificada en el cuerpo function(...args) { ...} )
...args es la matriz de todos los parámetros que se le darán a esa función cuando se la llame. Y es esta lista de parámetros la que es inspeccionada por la función devuelta (no por la función Validator ). Al final, la función creada llamará a la función inicial, dada como un parámetro para Validator , siempre que todos los parámetros sean números.
Entonces hay tres funciones involucradas:
1 la función inicial Multiply
2 la función Validator , que puede crear una nueva función envolviendo la función inicial
3 el devuelto y la función MultiplyValidArgs que puede usar