定义的静态方法未定义

时间:2015-03-11 09:36:57

标签: javascript google-maps oop google-maps-api-3

我制作了一个静态方法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);
    });
};

2 个答案:

答案 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 = ...

之上