Sé que es una pregunta extraña, pero la haré de todos modos.
La siguiente función de pseudocódigo proporciona un captador de propiedad virtual. Lo que debe hacer es esto:
> const calc = Calculator(3) > calc.multiple // returns getter result directly 6 > calc.multiple(4) // returns thunk result, thus behaves like a function 12Aquí está mi pseudocódigo:
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; }, }; }No, no hay forma de saber desde dentro de multiple si el valor que devuelve, cuando se usa, se usará como una función o como una no función.
Siempre puede devolver una función y proporcionar el valor inmediato como una propiedad en esa función, pero no puede devolver un número en un caso sino una función en otro.
También puede jugar juegos anulando las [Symbol.toPrimitive] , valueOf y/o toString en la función que devuelve, pero eso tiende a producir resultados sorprendentes cuando se usa en la naturaleza.
Probablemente sea mejor diferenciar por nombre, multiple vs. getMultiple , o multiple vs multipleThunk , etc.