我有一个这样的课程:
var MyClass = function(){
this.field = 'field';
}
MyClass.prototype.doSth(data){
//doSth with data and this.field;
}
MyClass.prototype.getData(){
$.ajax({
type: "post",
url: 'myurl',
}).success(this.doSth);
}
但是在doSth中,所有'this'指向jquery ajax对象而不是MyClass实例。
我添加了静态归档_self
以指向MyClass
自我MyClass._self = this;
,然后将doSth中的所有this
更改为MyClass._self
即可修复。但我认为这很难看。
我想知道有没有办法通过修改doSth body来解决我的问题?
答案 0 :(得分:3)
您可以使用要在回调中使用的context参数传递对象。
$.ajax({
type: "post",
url: 'myurl',
context: this
}).success(function(d){
this.doSth(d);
});
答案 1 :(得分:0)
我认为你的意思是:
MyClass.prototype.getData = function(){
var self = this;
$.ajax({
type: "post",
url: 'myurl',
}).success(function(){
self.doSth();
});
};
“getData”的定义需要一个如此处所示的函数 - 你的版本没有多大意义。
或者您甚至可以使用jQuery.proxy(请参阅http://api.jquery.com/jQuery.proxy/)
MyClass.prototype.getData = function(){
$.ajax({
type: "post",
url: 'myurl',
}).success( $.proxy(this.doSth, this) );
};
$。proxy创建一个包装函数,它将在给定对象的上下文中调用封闭的函数。