我已经将underscore.js延迟函数重写为如下所示。它在修改使用apply()之后起作用,但我不完全理解"这个"在apply中指向setTimeout中的匿名函数。
_.delay = function(func, wait) {
var args = Array.prototype.slice.call(arguments, 2);
setTimeout(function() {
return func.apply(this, args);
}, wait);
};
答案 0 :(得分:1)
this
在window
和setTimeout()
函数中引用setInterval()
。
如果你想避免这种副作用,你可以"绑定" this
的价值:
_.delay = function(func, wait, thisArg) {
var args = Array.prototype.slice.call(arguments, 2);
thisArg = thisArg || this;//assume a default value
setTimeout(function() {
return boundFunction.apply(thisArg, args);
}, wait);
};
然后,您可以将this
的值传递给_.delay()
,或者默认为_
。
另一种方法是在将函数传递给_.delay()
之前绑定它:
function a() {console.log(this);}
_.delay(a.bind({foo:'bar'}), 1000); //prints {foo: 'bar'}