具有 getter 值的函数

Function with getter value

我想用 getter 函数创建函数。该函数应该可以使用 (arguments) 或不带括号调用。 例如:

function play (song) {
    if (song){
        //  play song...
    } else {
        //  play resume song...
    }
}

然后调用 play()play 会产生相同的结果,但您仍然可以 play(song).

有什么办法吗?

PS:

play()    //  Called sucesfully
play      //  Returned reference to function - wrong
play(song)    //  Called sucesfully

你可以在不使用括号的情况下调用函数,使用 ECMAScript 第 5 版中的添加

下面是一个使用 Object.defineProperty 不使用括号调用函数并将其定义为 getter:

的示例
var o = {};
var bValue = 38;
Object.defineProperty(o, 'b', {
  get: function() { return bValue; },
  set: function(newValue) { bValue = newValue; }
});
o.b; // 38

编辑

试试这个

Function.prototype.valueOf = function() {
    return this();
}
Function.prototype.toString = function() {
    return this.valueOf().toString();
}

function play(song) { 
    if (song) {
        console.log('if case');
    } else {
        console.log('else case');
    }
}

play; // else case
play(true); // if case

注意:这会覆盖 FunctionvalueOftoString 方法。

在 Javascript 中,使用 () 是函数调用的正确语法,使用不带它的函数名称仅在那种情况下才有意义。

正在分配函数引用:

surface.ondraw = myfunction;

获取函数调用的实际结果:

result = myfunction();

我认为这就是 javascript 语法的工作原理。