我想为其参数创建一个函数映射。此地图将动态更新。最后,所有函数都将被调用,并带有相应的参数。
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.
我尝试了两种方法:
- 转换
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] }
在这里,我存储对函数的引用而不是整个函数定义。但是我必须遍历整个数组才能添加更多参数。
有没有更好的方法来维护这张地图?上述方法的缺点是什么?
更新
回答“在什么情况下我需要这个”这个问题:
我正在维护从参数到函数的映射。我动态更新它。稍后在我的代码中,我想创建一个反向映射并使用其所有参数调用函数。
例如:
1 -> foo1
2 -> foo2
3 -> foo1,foo2
4 -> foo1
... and so on.
然后我想创建一个这样的反向地图:
foo1 -> [1,3,4...]
foo2 -> [2,3,...]
最后打电话:
foo1( [1,3,4...])
foo2( [2,3,...])