イベントハンドラーでJavaScriptのプロトタイプクラスのメンバー変数にアクセスしようとしています。通常は「this」キーワードを使用します(イベントハンドラーの場合は「that」[これのコピー])。 。言うまでもなく、私はいくつかの問題に直面しています。
たとえば、次の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の呼び出しは、期待どおりに機能します( "value"と警告)が、 "this"キーワードがイベントターゲット(anchor()HTML要素)を参照するようになったため、リンクをクリックすると未定義の値になります。 。
私はプロトタイプのJavaScriptスタイルに慣れていませんが、過去には、クロージャーを使用して、コンストラクターで「this」のコピーを作成しました。
var that = this;
そして、「that」オブジェクトを介してイベントメソッドのメンバー変数にアクセスできます。これはプロトタイプコードでは機能しないようです。これを達成する別の方法はありますか?
ありがとう。