js动态多参数调用问题

请看下面的代码:
[code="js"]
//回调函数1
function callback(a,b,c)
{
alert(a+b+c);
}
//回调函数2
function callback2(a,b)
{
alert(a+b);
}
//这个方法做了一些操作、然后调用回调函数
function doCallback(fn,args)
{
//do something
if(args.length==2)
{
fn.call(this,args[0],args[1])
}
if(args.length==3)
{
fn.call(this,args[0],args[1],args[2])
}

//假如参数有很多个的话 应该怎么写?难道一致if下去吗?
}

function test()
{
//动态调用方法、并传递参数
doCallback(callback2,['a','b']);
doCallback(callback,['a','b','c']);
}
[/code]

假如还有callback3、callback4、callback5等回调函数,在doCallback方法中如何优雅一点来解决这个问题?
在上面的代码中doCallback方法中有没有更好的方法实现?请指点

[quote]能不能举个例子来看下?[/quote]
首先,假设你知道length=3,你装配出下面这条语句没有问题吧?
fn.call(this,args[0],args[1],args[2])
然后你可以用eval(string)来执行之,具体看说明文档,比如:
[url]http://www.w3schools.com/jsref/jsref_eval.asp[/url]

switch 可能比它少写些代码,但道理都一样。别的还没想到。

本来还想到 “表驱动” 这种方法的,把所有的方法放到一个数组里去,然后根据参数的个数去找相应下标中的函数并执行之,但是考虑到需要为找到的函数传递参数它的个数是不确定的,所以,就放弃这种念头了

用javascript的反射的话,非常简单:
fn.length就可以告诉你有几个参数。

当然我不玩js,我是基于这篇文章的答案是真的假设的:
http://stackoverflow.com/questions/6921588/is-it-possible-to-reflect-the-arguments-of-a-javascript-function

[quote]不是很明白?
知道fn有多少个参数又能干什么,把2和3替换掉?[/quote]
对啊,一个for循环组建invoke回调函数所需的字符串,再用动态解释执行之。 :idea: