getter return 是否可以根据调用类型(virt. 属性 或函数)调用 thunk 或值?

Can a getter return a thunk or value depending on the type call call (virt. property or function)?

我知道这是个奇怪的问题,但我还是会问的。

下面的伪代码函数提供了一个虚属性getter。它应该做的是:


> const calc = Calculator(3)
> calc.multiple    // returns getter result directly
6
> calc.multiple(4) // returns thunk result, thus behaves like a function
12

这是我的伪代码:

function Calculator(num) {

  return {
    get multiple() {
      if (isFunctionCalled()) {   // isFunctionCalled is an
                                  // imaginary function check
        return (mult = 3) => {
          return mult * num;
        };
      }
      // getter called, default calulation
      return 2 * num;
    },
  };
}

不,无法从 multiple 中知道它 return 的值在使用时是用作函数还是用作 non-function。

您总是可以 return 一个函数并在该函数上提供作为 属性 的立即值,但在一种情况下您不能 return 一个数字,而在一种情况下提供一个函数另一个。

您还可以玩游戏时覆盖 [Symbol.toPrimitive]valueOf、and/or toString 对 return 函数的操作,但这往往在野外使用时产生令人惊讶的结果。

您最好按名称进行区分,multiplegetMultiple,或 multiplemultipleThunk,等等