2011-08-23 141 views
-1

這是我的谷歌地圖示例代碼。JavaScript範圍丟失

google.maps.event.addListener(this.map, 'tilesloaded', function(overlayControl, zielgebiet) { 
      return function(overlayControl) { 
       if(MAPSEARCH_SCOPE.dragend) 
       MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE, overlayControl, zielgebiet); 
      } 
}(this.overlayControl, this.zielgebiet)); 

最初我正在使用一個gobal變量來保留我的類的範圍。在這個事件中,聽衆this代表google.maps.event類有沒有更好的方法來做到這一點?

現在我的問題是,我想打電話給setOverlayText一段時間後喜歡 liek

setTimeout("MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE, overlayControl, zielgebiet)", 1000); 

這樣我又失去了MAPSEARCH_SCOPE和類變量overlayControlzielgebiet變得不確定。

+0

不在'setTimeout'內使用字符串 – levu

+0

這些變量來自關閉此偵聽器的函數或這些是谷歌填充的變量? – Baz1nga

回答

2

試試這個:

setTimeout(function() { 
    MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE, overlayControl, zielgebiet); 
}, 1000) 
1

do't使用:

setTimeout("MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE, overlayControl, zielgebiet)", 1000); 

因爲字符串被髮送到setTimeout的不會是創建一個封閉的範圍,並在表達你想執行爲評估範圍將不復存在,這樣使用 匿名函數:

setTimeout(function() {MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE overlayControl, zielgebiet);}, 1000) 

所以函數對象將被創建,並且關閉範圍將被保留