我正在使用google-maps javascript v.3 API。我只是在这里展示了一个聪明的代码,我认为这是与我的问题相关的唯一部分。
我不明白为什么在调用gmaps.initMap时,对象GMaps
的成员变量似乎消失了,如下所示google.maps.event.addDomListener(window, 'load', gmaps.initMap);
我已经实现了函数GMaps.test
以查看成员变量GMaps.LATIDX
是否被正确警告,这确实按预期工作。但是,当我尝试通过GMaps.initMap
调用函数google.maps.event.addDomListener(window, 'load', gmaps.initMap);
中的相同成员变量时,会发出“未定义”警报,我不明白为什么。
<!DOCTYPE html>
<html>
<head>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
var GMaps = function() {
this.map = null;
// constants
this.LATIDX = 0; // 2d array index constant (latitude index)
this.LNGIDX = 1; // 2d array index constant (longtitude index)
this.test = function() {
alert(this.LATIDX); // THIS ALERTS 0 AS EXPECTED
}
this.initMap = function(aActor, aLatLngCoord, aLatLngCenter) {
alert(this.LATIDX); // THIS ALERTS "undefined", I DON'T UNDERSTAND WHY.
}
}
</script>
gmaps = new GMaps();
gmaps.test();
google.maps.event.addDomListener(window, 'load', gmaps.initMap);
</head>
</html>
答案 0 :(得分:1)
当您使用addDomListener
/ addListener
时,API将在应用了侦听器的对象的上下文中执行回调(在您的代码中为window
),{{1将指向这个对象。
要更改上下文,请使用bind(或apply)并使用所需的对象(this
)作为第一个参数:
gmaps
当函数是特定对象的方法时,就像在代码中一样,使用执行所需函数的回调(对象方法)就足够了,那么就不需要更改上下文了:
google.maps.event.addDomListener(window,
'load',
function(){
gmaps.initMap.call(gmaps);
});