具有 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
注意:这会覆盖 Function
的 valueOf
和 toString
方法。
在 Javascript 中,使用 () 是函数调用的正确语法,使用不带它的函数名称仅在那种情况下才有意义。
正在分配函数引用:
surface.ondraw = myfunction;
获取函数调用的实际结果:
result = myfunction();
我认为这就是 javascript 语法的工作原理。
我想用 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
注意:这会覆盖 Function
的 valueOf
和 toString
方法。
在 Javascript 中,使用 () 是函数调用的正确语法,使用不带它的函数名称仅在那种情况下才有意义。
正在分配函数引用:
surface.ondraw = myfunction;
获取函数调用的实际结果:
result = myfunction();
我认为这就是 javascript 语法的工作原理。