我做了一个静态方法geocode()
。但是当我调用它时,我得到一个错误:
未捕获的TypeError:undefined不是函数
我无法确定我在这里做错了什么。
'use strict';
var gMap = (function (window, document, Gmap) {
var gMap;
Gmap.geocode({ 'address': 'Paris, France' }, function (results, status) {
if (status !== Gmap.geocodeStatus.OK) {
throw new Error('Geocode was unsuccessful: ' + status);
}
gMap = new Gmap(document.getElementById('map-canvas'), {
center: results[0].geometry.location,
zoom: 10
});
});
return gMap;
}(window, document, Gmap));
function Gmap(element, options) {
if (!(typeof window.google === 'object' && typeof window.google.maps === 'object')) {
throw Error('The Google Maps JavaScript API v3 library is required.');
}
this.googleMap = new google.maps.Map(element, options);
this.currentLocation = options.center;
this.markers = [];
}
Gmap.geocode = function (geocoderRequest, callback) {
googleGeocoder = new google.maps.Geocoder();
googleGeocoder.geocode(geocoderRequest, function (results, status) {
callback(results, status);
});
};
最佳答案
这是由于function hoisting。代码中发生的事情是,您的function Gmap(...)
被提升到顶部并在var gMap = ...
之前进行了解析,但是Gmap.geocode
是在var gMap
声明之后声明的,因此此时不存在。
要解决此问题,只需在Gmap.geocode
上方声明var gMap = ...
即可:
Gmap.geocode = function ( ... ) { ... } ;
var gMap = ... ;