先日、デザインチームのメンバーに質問されたのですが、jQueryを使っていて、イベントハンドラ(ボタンがクリックされた時とかに呼ばれる関数のこと)の中で、thisを参照すると、なんかおかしい、ということでした。
結構これではまる人がいるのではないかと思い、ちょっと書いてみようと思いました。
JavaScriptではprototypeでクラスのようなものを定義できますが(別にprototypeを使わなくてもできますが、、)、他のオブジェクト指向言語(C#、Javat等)になれている人は、ついその中で定義されている関数内ではthisの参照は常に自分自身のクラスのインスタンスだと思ってしまいます。
が、JavaScriptではそうはいかず、以下のようなクラス(と呼ばせてください)を定義した場合、

function MyClass(){
? //button1のクリックイベントハンドラを設定
? $('#button1').bind('click', this.onButtonClicked);
}

MyClass.prototype = {
? //button1をクリックするとこの関数が呼ばれます
? onButtonClicked : function(e){
??? this.sayHello();
? },

? sayHello : function(){
??? alert('hello world!!');
? }
}

一見、button1をクリックすれば 'hello world!!' 当メッセージが表示されるかと思いますが、実際にはundefined エラーになってしまいます。
これは、onButtonClicked関数内で this が参照するのは、 MyClassのインスタンスではなく、button1そのものだからです。これはJavaScriptの仕組み上変えられません。
では、onButton1Clickedの中でMyClassのインスタンスを参照するにはどうすればいいのかというと、イベントを設定する時に、自分自身(this)への参照をイベントハンドラに渡してやる必要があります。
jQueryではイベントを設定する関数 bind の第2パラメータで任意の情報を設定することができるので、そこで設定してやります。

? $('#button1').bind('click', {"self" : this},? this.onButtonClicked);

のように、第2パラメータでJSON形式で自由にデータを設定できます。ここでは self という名前で thisへの参照を設定しています。
で、これをイベントハンドラの中で参照する場合は、

? onButtonClicked : function(e){
??? e.data.self.sayHello();
? }

って感じで、イベント引数の data プロパティ経由で参照できます。
ここで、e.data.self というのは、先ほど指定した、 "self" : this のことなので、つまりMyClassのインスタンスを指しています。
多分jQueryではこんな感じで参照を保持するしか方法がないかと思われます。※間違っていたらおしえてください。
これは、対抗馬のPrototypeフレームワークでは、イベントを設定する際に、
bindAsEventListener(this)
とすることで、素直にイベントハンドラ内で this を参照してもちゃんと期待通りに MyClassのインスタンスにアクセスできます。
何故この辺をjQueryがサポートしないのか、ちょっと不思議なのですが、、、、。
私も本当はjQueryを使いたいのですが、なんか、この辺が引っかかって、まだPrototypeの方を使っています。
これは、単に私のjQueryの理解が足りないせいかもしれませんので、誰か、詳しい方がいれば、是非教えてください。