Function.prototype.defer = function(ms) {
var self = this;
return function() {
setTimeout(self, ms);
};
}
function f(a, b) {
alert(a + b);
}
f.defer(5000)(1, 2); // 3
应该在5秒内显示数字3,但不知何故推断出NaN。
答案 0 :(得分:3)
defer
返回的功能不会带任何参数,因此会忽略1
和2
。
如果你想使用它们,那么你需要捕获它们并用它们做点什么。
Function.prototype.defer = function(ms) {
var self = this;
return function(x, y) {
setTimeout(self.bind(this, x, y), ms);
};
}
function f(a, b) {
alert(a + b);
}
f.defer(5000)(1, 2); // 3

答案 1 :(得分:2)
这是因为您正在传递setTimeout
函数,但参数1, 2
未绑定到它,因此它调用f
时没有参数。< / p>
你可以这样解决:
Function.prototype.defer = function(ms) {
var self = this;
return function() {
var args = arguments,
context = this;
setTimeout(function() {
self.apply(context, args);
}, ms);
};
}
function f(a, b) {
alert(a + b);
}
f.defer(5000)(1, 2); // 3