JavaScriptでクラスを定義し始めていますが、キーワードで多くの問題が発生していthis
ます。
これが私がやりたいことの例です:
function MyMap() {
this.map = new google.maps.Map(....);
google.maps.event.addListener(this.map, 'idle', function() {
this.mapIdle(); // PROBLEM: "this" undefined
});
this.mapIdle = function() {
google.maps.event.addListener(marker, 'click', function() {
$("button").click(function() {
$.ajax({
success: function() {
this.map.clearInfoWindows(); // PROBLEM: "this" undefined
}
});
});
});
}
}
コメントでわかるように、クロージャー内this
で使用されているため、ここでは機能しません。
私は次のような回避策を使い始めました:
var that = this;
google.maps.event.addListener(this.map, 'idle', function() {
that.mapIdle();
});
または、コールバック関数の周りにコールバック関数を定義する必要がある場合でも(真剣に!!)。
これは非常に醜く、どこでも機能するわけではありません。ネストされたラムダ関数をたくさん取得すると(私が示した例のように)、クラス属性の使用方法がわかりません。
それを行うための最良かつ最も正しい方法は何ですか?