0

我想向谷歌地图事件添加侦听器,但不使用匿名函数,而是使用命名的外部函数,因为这发生在循环内,我不想在那里定义匿名函数,而是使用命名的外部函数:

不是:

for (...) {
    googleMap.event.addListener(instance, eventName, function() {...});
}

而是…… 像:

doSomething = function(parameter1, parameter2...) {
    ...
}

for (...) {
    googleMap.event.addListener(instance, eventName, params, doSomething);
}

当“实例”是谷歌地图标记时,我可以使用将参数添加到标记marker.set(paramName, paramValue),然后通过访问事件处理函数内部的参数this.paramName,但是当我有任何其他方法可以将值传递给事件处理函数不想使用匿名的?

欢迎任何建议,罗马。

4

2 回答 2

3

我有同样的问题。这是一个解决方案。通过使用此处描述的模式,它真正避免了循环中的创建函数问题

在 JavaScript 中,为什么在循环中创建函数会造成计算上的浪费的具体原因是什么?

我称之为“函数工厂”模式。

其他成分是函数内部的“this”指的是引发函数的对象(地图上被点击的东西,或者其他什么),并且因为 JavaScript 是完全动态的,你可以随意附加额外的属性到这个东西单击它,并通过在函数内调用 this.blah 来查询它们

function doSomethingHandlerFactory(){
var f = function(event){
    //do something, for example call a method on a property we attached to the object which raised the event
    this.blah.clicked(event);
};
return f;
}

//add a property to the google overlay object (for example a polyline which we've already set up)
thePolyline.blah = ...;

//get a handle for a function, attach the event (in this case to a polyline), and keep  
//a reference to the event (in case we want to call removeListener later).  The latter
//is optional.
var f = doSomethingHandlerFactory();
var ev = google.maps.event.addListener(thePolyline, 'click', f);

我希望这可以帮助某人。

于 2013-11-10T00:01:00.513 回答
1

如何将您的命名函数包装在匿名函数中:

google.maps.event.addListener(instance, eventName, function() { doSomething(parameter1, parameter2,...) });
于 2013-03-30T14:28:33.067 回答