我想爲它的參數創建一個函數映射。這張地圖會動態更新。最後所有的函數都會被調用,並有相應的參數。什麼是創建函數映射到參數的最有效方法?
function foo1(x) {
//do something with x
}
function foo2(x) {
//do something else with x
}
var map = {};
map[foo1] = [1,2,3]; //this array is updated dynamically in my code
map[foo2] = [4,5,6];
// I want to call foo1 and foo2 with their [1,2,3] and [4,5,6] arguments respectively.
我試圖2點的方法:
- 轉換
foo1
到字符串(使用toString()
法)作爲用於地圖的關鍵。然後稍後我使用Function構造函數從這個字符串中取回函數。但是,如果這會影響表演,我恐怕是這樣。
// This works. But concerned about the performance
map[foo1.toString()] = [1,2,3];
for(i in map){
var fn = Function('return '+ i)();
fn(map[i]);
}
- 存儲對象是包的功能和它們對應的參數,如:
{ fn : foo1 , args : [1,2,3] }
{ fn : foo2 , args : [4,5,6] }
我在這裏存儲的功能,而不是整個函數定義的引用。但我必須遍歷整個數組以添加更多參數。
有沒有更好的方法來維護這張地圖?上述方法有什麼缺點?
UPDATE
回答這個問題:「在什麼情況下,我需要這個」:
我保持距離參數的地圖功能。我動態更新它。 後來在我的代碼中,我想創建一個反向映射並用其所有參數調用函數。
對於如:
1 -> foo1
2 -> foo2
3 -> foo1,foo2
4 -> foo1
... and so on.
然後我想創建反向映射是這樣的:
foo1 -> [1,3,4...]
foo2 -> [2,3,...]
最後呼籲:在JavaScript
foo1([1,3,4...])
foo2([2,3,...])
你的總體目標是什麼?我想不出一個會要求這樣的事情的情況。 – 2013-04-27 02:50:22
不要忘記函數可以有屬性。您可以將函數始終存儲在數組中,並將它們的索引作爲索引附加到函數中,然後以這種方式查找它們。 – 2013-04-27 03:42:34
@DaggNabbit,這基本上是我發佈的解決方案的一個變種;) – plalx 2013-04-27 04:03:00