我開始在JavaScript中定義類,並且我在關鍵字this
中遇到了很多麻煩。在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
不會在這裏工作,因爲它是用來封閉內。
我已經開始使用workarounds,如:
var that = this;
google.maps.event.addListener(this.map, 'idle', function() {
that.mapIdle();
});
甚至,你必須define a callback function在你的回調函數(嚴重!!)。
這是極度醜陋並且無處不在。當我得到很多嵌套的lambda函數(如我給出的例子)時,我不知道如何使用類屬性。
什麼是最好和最正確的方法來做到這一點?
作爲一個側面說明,你可能會有所幫助:充分了解' this'關鍵字](http://net.tutsplus.com/tutorials/javascript-ajax/fully-understanding-the-this-keyword/)。 – 2012-04-03 22:04:50
另外,作爲一個附註,你很少會發現在Javascript中做任何事情的「最終方式」 - 它不是那種語言。 – nrabinowitz 2012-04-03 22:06:01