2013-03-30 187 views
0

我想向Google地圖事件添加偵聽器,但 不使用匿名函數但命名爲外部函數 ,因爲這發生在循環內部,我不想定義一個匿名函數在那裏,而是使用了一個名爲,外部函數:如何通過map.event.addListener將參數傳遞給外部函數

不:

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訪問事件處理函數內部的參數,但沒有任何當我不想使用匿名函數時,將值傳遞給事件處理函數的其他方法是什麼?

任何意見歡迎,羅馬。

回答

3

我有同樣的問題。這是一個解決方案。它真正避免了創建函數在一個循環問題,通過這裏所描述

In JavaScript, what are specific reasons why creating functions within a loop can be computationally wasteful?

我稱之爲「功能工廠」模式的模式。

其他成分是在函數「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); 

我希望這可以幫助別人了內對它們進行查詢。

1

如何包裝你的命名函數匿名函數:

google.maps.event.addListener(instance, eventName, function() { doSomething(parameter1, parameter2,...) }); 
+0

不錯,geocodezip。這樣我可以傳遞我的參數,並仍然使用命名函數。但說實話,這個想法並不是在這個地方定義一個函數,因爲addListener發生在一個循環中,我認爲在一個循環中定義一個函數是一種糟糕的風格......我將把它添加到原始問題 - 對不起,應該早些提到這一點。 – RSeidelsohn

相關問題