javascript 装饰器的概念问题

problem in concept of javascript decorators

我正在尝试借助这篇文章在 javascript 中学习装饰器: https://dev.to/logrocket/understanding-javascript-decorators-ba2.

我的问题是:

  1. 我们怎么可能在 Validator 函数中读取 Multiply 函数的参数?
  2. 为什么 Multiply 参数在 Validator 函数中的 return function(...args) 之前未定义?

代码如下:

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);

验证器创建并 returns 一个新函数(在正文中指定 function(...args) { ...}

...args 是调用时将赋予该函数的所有参数的数组。返回函数检查的正是这个参数列表(而不是 Validator 函数) 最后创建的函数将调用初始函数,作为参数给 Validator,前提是所有参数都是数字

所以涉及三个函数:

1 初始函数Multiply

2 Validator 函数,可以创建一个包装初始函数的新函数

3 返回的函数 MultiplyValidArgs 您可以使用