我想用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
答案 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语法在这里的工作原理并不神秘。