Javascript 具有getter值的函数

Javascript 具有getter值的函数,javascript,function,getter,Javascript,Function,Getter,我想用getter函数创建函数。该函数应该可以使用(参数)调用,也可以不使用括号调用。 例: 然后调用play()和play将产生相同的结果,但您仍然可以执行play(song) 有没有办法做到这一点 附言: 使用ECMAScript第5版中的添加项,可以不使用括号调用函数 下面是一个在不使用括号的情况下调用函数并将其定义为getter的示例: var o = {}; var bValue = 38; Object.defineProperty(o, 'b', { get: function

我想用getter函数创建函数。该函数应该可以使用
(参数)
调用,也可以不使用括号调用。 例:

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

有没有办法做到这一点

附言:


使用ECMAScript第5版中的添加项,可以不使用括号调用函数

下面是一个在不使用括号的情况下调用函数并将其定义为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
注意:在Javascript中,使用()覆盖
函数的
值和
toString
方法是函数调用的正确语法,使用函数名而不使用它仅在那种上下文中才有意义

分配函数引用:

surface.ondraw = myfunction;
获取函数调用的实际结果:

result = myfunction();

这就是javascript语法的工作原理,我想这并不神秘。

您刚才编写的代码有什么问题吗?调用play将返回对函数的引用,而不是调用函数本身。(已编辑)为什么希望变量像函数一样工作?在调用
play
时,不使用括号。您只是引用函数,而不是执行(或调用)函数。另一种方法是创建引用函数的变量。不是“悲伤”而是幸运的:即使没有这种奇怪的代码,我们周围的代码也很糟糕。我知道这一点,但这只适用于值,而不适用于函数,对吧?我在寻找更多细节并找到了答案。我更新了我的答案it@Venugopal:你也明白它的作用吗?它不适用于一个简单的
游戏valueOf
toString
是每个对象继承的姐妹方法。其中一个方法将根据需要调用。如果表达式提示需要字符串,则调用
toString
,否则调用其
valueOf
。正如“JavaScript调用
valueOf
方法将对象转换为基本值。您很少需要自己调用
valueOf
方法;当遇到需要基本值的对象时,JavaScript会自动调用它。”通常,如果您使用的函数没有偏执,调用其
valueOf
函数并返回函数定义。在这里,我们覆盖了
valueOf
函数,在这里我们实际使用
this()
调用函数。还有setter和getters函数
surface.ondraw = myfunction;
result = myfunction();