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 函数的操作,但这往往在野外使用时产生令人惊讶的结果。
您最好按名称进行区分,multiple
与 getMultiple
,或 multiple
与 multipleThunk
,等等
我知道这是个奇怪的问题,但我还是会问的。
下面的伪代码函数提供了一个虚属性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 函数的操作,但这往往在野外使用时产生令人惊讶的结果。
您最好按名称进行区分,multiple
与 getMultiple
,或 multiple
与 multipleThunk
,等等