Javascript这个对象并绑定

时间:2013-02-04 10:57:24

标签: javascript jquery

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的值将不相同

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

2 个答案:

答案 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)。