我做了一个静态方法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 = ... ;

10-08 02:54