具有getter值的函数

时间:2015-12-22 06:04:22

标签: javascript function getter

我想用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

2 个答案:

答案 0 :(得分:3)

您可以使用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

警告:这会覆盖valueOf的{​​{1}}和toString方法。

答案 1 :(得分:-1)

在Javascript中使用()是函数调用的正确语法,使用函数名称,只有在那种上下文中才有意义。

分配功能参考:

surface.ondraw = myfunction;

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

result = myfunction();

这就是我认为javascript语法在这里的工作原理并不神秘。