3

我无法弄清楚如何在 jquery ajax 回调中正确引用“正确”“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?有一个更好的方法吗?

4

4 回答 4

4

您可以使用以下context属性$.ajax

var foo1 = new Foo();

$.ajax({
  context: foo1,
  success: function(response) { this.onCallback(response); }
});

...这会导致this回调引用您的Foo对象。

于 2012-01-10T17:20:33.283 回答
2

你不能那样做。

您必须写:

$.ajax({
  ...
  success: function(response) { foo1.onCallback(response); ... }
});

或这个:

myCallback = foo1.onCallback.bind(foo1);

请注意,这Function.bind()需要 ECMAScript 5。

于 2012-01-10T16:58:29.940 回答
1

使用以下成语:

myCallback = foo1.onCallback.bind(foo1);

事实上,您应该进一步利用 JavaScript 中的一流函数支持:

foo1 = new Foo()

$.ajax({
  ...
  success: foo1.myCallback.bind(foo1)
});

也可以看看:

于 2012-01-10T16:57:18.053 回答
-1

您可以简单地添加语句alert(this);以查看它是否为 foo1。

于 2012-01-10T16:58:13.307 回答