我制作了一个静态方法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);
});
};
答案 0 :(得分:1)
这是由 function hoisting 引起的。您的代码中发生的事情是,function Gmap(...)
被提升到顶部并在 var gMap = ...
之前解析,但是Gmap.geocode
是在var gMap
之后宣布的1}}声明,因此在那时不存在。
要解决此问题,只需在 Gmap.geocode
上方声明var gMap = ...
:
Gmap.geocode = function ( ... ) { ... } ;
var gMap = ... ;
答案 1 :(得分:0)
反转你的代码。
将Gmap定义放在var gMap = ...