所以我有一个带有几个方法的类,其中一个方法用作回调。但是根据我如何声明回调,this
的指针有一个切换的上下文。我想知道如何在this
的指针是对象本身的情况下完成这项工作。
我的问题的一个例子:
return {
init: function(){
this.starting = 0;
var _this = this;
$.ajax({/* some params */})
.done(function(response){
_this.addOne(); // here the context is fine, one gets added
})
.fail( _this.subtractOne ); // the callback points to the function below,
// but 'this' doesn't point to the same thing
},
addOne: function(){
this.starting++;
},
subtractOne: function(){
this.starting--;
}
}
如何使用.fail
使用的符号,但仍然正确减去?
答案 0 :(得分:3)
bind()
将确保使用正确的this
引用进行调用:
.fail( _this.subtractOne.bind( _this ) );
答案 1 :(得分:3)
因为this
取决于函数的调用方式,而不是如何编写。
jQuery调用其回调函数this
绑定到当前对jQuery有意义的任何内容(例如,对于事件处理程序,this
绑定到触发事件的DOM元素。 / p>
正因为如此,this
中的this.starting--
并不是您认为的。
您可以通过在您的函数上传递this
的结果来强制.bind()
成为您想要的任何内容,如下所示:
.fail(_this.substractOne.bind(_this));