0
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");
        }
    }

})

请仔细阅读代码并阅读注释,这里的问题是我需要thissetTimeOut函数中使用,所以我绑定thissetTimeOut,但是当我以递归方式调用函数时,值this将不一样

注意:-我不想将对象传递给函数并且不想使用setIntervelhttp://www.erichynds.com/javascript/a-recursive-settimeout-pattern/

4

2 回答 2

2

您的递归调用可以这样写:

complete: function() {
    loopsiloop.call(this);
}

以确保第二次正确设置上下文。

也可以这样写,但不建议这样做,因为它会.bind在每次传递时一遍又一遍地调用:

complete: loopsiloop().bind(this)  // NB: no function wrap, just passes the ref
于 2013-02-04T11:07:29.003 回答
0

不要绑定也不要使用this. var someVariable = this;在调用之前设置setTimeout并让它保留在递归范围内(使用它而不是this在函数内部)。

于 2013-02-04T10:59:45.747 回答