我无法弄清楚如何在jquery ajax回调中正确引用'right''this'。
我有一个javascript类,我在其中定义了回调:
Foo.prototype.onCallback = function(response) {
// 'this' should refer to an instance of foo in both the following cases
this.bar(...)
this.hello(...)
}
在课堂之外我有:
foo1 = new Foo()
myCallback = foo1.onCallback;
$.ajax({
...
success: function(response) {myCallback(response); ... }
});
现在我相信foo1.onCallback中的'this'指的是附加ajax调用的html元素。我如何确保'this'指的是foo1?有更好的方法吗?
答案 0 :(得分:4)
您可以使用$.ajax
的context
属性:
var foo1 = new Foo();
$.ajax({
context: foo1,
success: function(response) { this.onCallback(response); }
});
...这会导致回调中的this
引用您的Foo
对象。
答案 1 :(得分:2)
你做不到。
你必须写:
$.ajax({
...
success: function(response) { foo1.onCallback(response); ... }
});
或者这个:
myCallback = foo1.onCallback.bind(foo1);
请注意Function.bind()
需要ECMAScript 5.
答案 2 :(得分:1)
使用以下习语:
myCallback = foo1.onCallback.bind(foo1);
事实上,您应该进一步利用JavaScript中的一流功能支持:
foo1 = new Foo()
$.ajax({
...
success: foo1.myCallback.bind(foo1)
});
答案 3 :(得分:-1)
您只需添加语句alert(this);
即可查看它是否为foo1。