JavaScriptのプロトタイプクラスのメンバー変数にイベントハンドラでアクセスしようとしています。 "それ"(イベントハンドラの場合は[これのコピー])。言うまでもなく、私はいくつかの問題に遭遇しています。JavaScriptプロトタイプオブジェクトを使用する場合のイベントメソッドの "this"キーワード
テイク、例えば、このHTMLスニペット:
<a id="myLink" href="#">My Link</a>
そして、このJavaScriptコード:
function MyClass()
{
this.field = "value"
this.link = document.getElementById("myLink");
this.link.onclick = this.EventMethod;
}
MyClass.prototype.NormalMethod = function()
{
alert(this.field);
}
MyClass.prototype.EventMethod = function(e)
{
alert(this.field);
}
は、MyClassのオブジェクトをインスタンス化し、NormalMethodを呼び出すことは、私は(アラートが「言ってそれを期待するとまったく同じように動作しますこの "キーワードがイベントターゲット(anchor()HTML要素)を参照するため、リンクをクリックすると結果は未定義の値になります。
私はプロトタイプのJavaScriptスタイルに新たなんだけど、過去に、閉鎖で、私は単にコンストラクタで「この」のコピーを作った:
var that = this;
そして、私はメンバーにアクセスすることができました"that"オブジェクト経由のイベントメソッドの変数。プロトタイプコードでは動作しないようです。これを達成する別の方法がありますか?
ありがとうございました。
あなたはPrototypeライブラリーや、むしろストレートJavaScriptのプロトタイプのクラスを参照している:この質問は、全体のプロトタイプ・ライブラリを含めずにbindメソッドの実装で、ここで回答されている別のSOの質問の重複していますか? –
3年遅れて返答:)しかし、後世のために:私はストレートJavaScriptのプロトタイプのクラスを指していました。 – Michael
[正しいコールバックの 'this/contextにアクセスするには?](http://stackoverflow.com/q/20279484/1048572)の重複がありますか? – Bergi