new Something({
events:{
load: (function loopsiloop(){
console.log(this); // firstime this will be Something, but next call what its
setTimeout(function(){
console.log(this);
$.ajax({
url: 'foo.htm',
context: this,
success: function( response ){
// do something with the response
},
error: function(){
// do some error handling. you
// should probably adjust the timeout
// here.
},
complete: function(){
loopsiloop(); // recurse //need to bind this here like loopsiloop().bind(this)
}
});
}.bind(this), 5000);
}),
click: function(){
alert("clicked");
}
}
})
请仔细阅读代码并阅读评论,此处问题是我需要在this
函数中使用setTimeOut
,因此我将this
绑定到setTimeOut
,但是当我将函数称为递归函数时,this
的值将不相同
注意: - 我不想将对象传递给函数,不想使用setIntervel
(http://www.erichynds.com/javascript/a-recursive-settimeout-pattern/)
答案 0 :(得分:2)
您的递归调用可以这样写:
complete: function() {
loopsiloop.call(this);
}
确保第二次正确设置上下文。
它也可以这样写,但不推荐使用,因为它会在每次传递时反复调用.bind
:
complete: loopsiloop().bind(this) // NB: no function wrap, just passes the ref
答案 1 :(得分:0)
不要绑定,不要使用this
。在调用var someVariable = this;
之前设置setTimeout
并让它保留在递归的范围内(在函数内使用它而不是this
)。