谷歌地图javascript directionsService.route请求内部类:将类实例传递给回调函数

时间:2015-03-30 20:14:31

标签: javascript google-maps-api-3

谷歌地图指示服务路线请求具有以下原型:

route(request:DirectionsRequest, callback:function(DirectionsResult, DirectionsStatus))

我正在类实例方法中调用服务请求,如下所示:

myClass.protype.routeStuff(){
    directionsService.route(request, function(response, status){
         '''handle the response here'''
        });
};

我需要在'''处理响应中访问myClass实例''''。我不是JS专家。我该如何传递它?

更一般地说,给定路由的原型,我如何将其他参数传递给回调函数?

更新1: 我最终使用Chad的答案创建了一个调用的类回调方法:

directionsService.route(request, this.extendRouteToLocationCallback.bind(this));

独立地,我能够通过在回调函数上强制关闭来解决问题,如下所示:

var extrastuff = this;
directionsService.route(request, function (response, status) {
    routeCallback(extrastuff, response, status);});

我相信也可以这样做:

directionsService.route(request, function (response, status) {
    routeCallback(response, status);}.bind(this));

为了我的直接目的,Chad的方法产生了更好的结构化代码。

更新2:我采用的最终解决方案与此绑定并传递了类似的额外参数:

var request = buildMapRequest(currentEndLocation, null, location);
directionsService.route(request, this.extendRouteToLocationCallback.bind(this, location));

回调看起来像这样:

Route.prototype.extendRouteToLocationCallback = function(location, response, status){...}

1 个答案:

答案 0 :(得分:0)

使用Function binding

function directionsServiceCallback(response, status){
   // this keyword is now a reference to a myClass instance due to
   // function binding.
});

myClass.protype.routeStuff(){
  directionsService.route(request, directionsServiceCallback.bind(this));
};