JavaScript でオブジェクトのメンバであるメソッドをイベントハンドラにしたときに非 DOM の this を取りたい
ちょっとエントリのタイトルが微妙だが、まず次の HTML + JavaScript コードをご覧いただきたい。(前後の HTML コードをカットしている) s1 ボタン 上記を実行して「s1 ボタン」をクリックすると、「This is s1ButtonName」とアラートが表示される。 これはイベントでは this がイベント送出の DOM オブジェクトとなるからだ。button 要素の name 属性が this.name となる。s1.button_click を呼び出していても、this.name が “s1” とはならない。 こういうコーディングをしたい場合、今まで SampleA に当たるものがシングルトンだった。そのため、this の代わりに SampleA.name とベタに定義してしまっても問題がなかった。 ということで、複数インスタンスを作りたい場合どうすれば良いかというのが本題である。 あるオブジェクトのメソッドの中でイベントを無名関数で定義するならば、その中でその外のスコープの this を参照 したいときは with やローカル変数に一旦代入することで拾えるようになる。 例えば、このようなな感じで書くだろう。 var sample = { name: “名前”, display: function(){ var that = this; $(“s1button”).click(function(){ alert(that.name); }); } }; ...