0

私が次のものを持っていると仮定します:

function test() {
     this.message = "Hello World";
     this.marker = //A google marker object
     google.maps.event.addListener(this.marker,'click', function(mouseEvent) {
         alert(this.message); // Incorrect as "this" refers to this.mypolygon
     });     
}

イベントリスナー内で「Hello World」を正しく警告できるようにするにはどうすればよいですか? つまり、イベントリスナー内から「this」の正しいコンテキストを取得しますか?

4

2 に答える 2

0

thisキーワードを使用しないでください。内部で変更されないものを使用してくださいaddListener

function test() {
     foo.message = "Hello World";
     this.marker = //A google marker object
     google.maps.event.addListener(this.marker,'click', function(mouseEvent) {
         alert(foo.message); 
     });     
}

またはさらにクリーン:

function test() {
     var message = "Hello World";
     this.marker = //A google marker object
     google.maps.event.addListener(this.marker,'click', function(mouseEvent) {
         alert(message); 
     });     
}

または、次のようにすることもできます。

function test() {
     this.message = "Hello World";
     this.marker = //A google marker object

     var self = this;
     google.maps.event.addListener(this.marker,'click', function(mouseEvent) {
         alert(self.message); 
     });     
}

this最後に、本当にクリック ハンドラー内で使用したい場合は、以下を使用できますbind

function test() {
     this.message = "Hello World";
     this.marker = //A google marker object

     google.maps.event.addListener(this.marker,'click', myFunc.bind(this) );

     function myFunc(mouseEvent) {
         alert(this.message); 
     }     
}
于 2013-04-04T19:37:37.750 に答える