3

jqueryajaxコールバックで「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を参照していることを確認するにはどうすればよいですか?これを行うためのより良い方法はありますか?

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()ECMAScript5が必要であることに注意してください。

于 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 に答える