如何从同一对象中的不同函数调用对象定义函数?

时间:2012-07-10 00:42:01

标签: javascript function object google-maps-api-3

我正在使用javascript为小型个人项目制作自定义对象,主要用于平板电脑(但也使用笔记本电脑)。该对象涉及谷歌地图,GPS跟踪以及其他程序。在对象内部,我定义了从对象外部调用的函数(enableGps, disableGps)。在enableGps内部,我在使用外部error_handler和内部对象函数(this.handleGps)时开始跟踪以处理gps数据(纬度,经度,精度等)。在this.handleGps中,我尝试调用this.updateGpsMarker函数来更新地图上的实际标记,但会抛出异常。

  

未捕获的TypeError:对象[对象窗口]没有方法   'updateGpsMarker'

如何从this.updateGpsMarker致电this.handleGps?请注意我需要this.updateGpsMarker作为从外部调用的函数(长解释) 我将抛出代码只是为了让我更清楚我想要做什么。

function RouteAssistant(mapCanvas, mapOptions)
{
    // Google mapping and geocoding
    this.map = new google.maps.Map(mapCanvas, mapOptions);
    this.geo = new google.maps.Geocoder();
    this.gpsMarker = null;

    this.updateGpsMarker = function(lat, lon)
    {
        console.log("Updating GPS marker");
        if (this.gpsMarker == null)
        {
            console.log("GPS Marker not created. Creating GPS marker at " + lat + "," + lon);
            this.gpsMarker = new google.maps.Marker(
            {
                position: new google.maps.LatLng(lat,lon),
                map: this.map,
                title: "I am here!"
            });
            this.map.setCenter(new google.maps.LatLng(lat,lon));
        }
        else
        {
            console.log("GPS Marker created. Updating GPS marker to " + lat + "," + lon);
            this.gpsMarker.setPosition(new google.maps.LatLng(lat,lon));
        }
    }

    // GPS and tracking
    this.gpsProcess = null;
    this.enableGps = function (handle_errors)
    {
        if (this.gpsProcess == null) {
            console.log("Enabling GPS");
            this.gpsProcess = navigator.geolocation.watchPosition(this.handleGps, handle_errors);
        }
    };
    this.disableGps = function()
    {
        if (this.gpsProcess != null)
        {
            console.log("Disabling GPS");
            navigator.geolocation.clearWatch(this.gpsProcess);
            this.gpsProcess = null;
        }
    };
    this.handleGps = function(position)
    {
        this.updateGpsMarker(position.coords.latitude, position.coords.longitude);
    }
}

1 个答案:

答案 0 :(得分:0)

可能你可以使用像揭示模数模式之类的东西来创建一个干净的对象并将所有函数放入。像

这样的东西
 var routeAssistant = function(mapCanvas, mapOptions) {

     var map = new google.maps.Map(mapCanvas, mapOptions).
     updateGpsMarker = function(lat, long) {
         //You can directly access 'map' here.
     };
     return {
      updateGpsMarker : updateGpsMarker
     }; 
 };

然后您可以通过

来使用它
  var myObject = new routeAssistant(mapCanvas, mapOptions);
  myObject.updateGpsMarker(latitude,longtitude);