以下是我的Google地图示例代码。
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 谎言
setTimeout("MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE, overlayControl, zielgebiet)", 1000);
这样做我再次松开MAPSEARCH_SCOPE
,类变量overlayControl
和zielgebiet
变得未定义。
答案 0 :(得分:2)
试试这个:
setTimeout(function() {
MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE, overlayControl, zielgebiet);
}, 1000)
答案 1 :(得分:1)
不要使用它:
setTimeout("MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE, overlayControl, zielgebiet)", 1000);
因为发送到setTimeout的字符串不会创建闭包范围,并且当要执行的表达式为eval时,范围将不再存在,请使用 像这样的匿名函数:
setTimeout(function() {MAPSEARCH_SCOPE.setOverlaysText.bind(MAPSEARCH_SCOPE overlayControl, zielgebiet);}, 1000)
因此将创建函数对象,并且将保持闭包范围