Javascript范围损失

时间:2011-08-23 09:43:57

标签: javascript prototypejs

以下是我的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,类变量overlayControlzielgebiet变得未定义。

2 个答案:

答案 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)

因此将创建函数对象,并且将保持闭包范围