问题请看代码中的注解:
- //回调函数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']);
- }
后来经过网友的帮助又找到了一种解决的方法
- //回调函数1
- function callback(a,b,c)
- {
- alert(a+b+c);
- }
- //回调函数2
- function callback2(a,b)
- {
- alert(a+b);
- }
- //这个方法做了一些操作、然后调用回调函数
- function doCallback(fn,args)
- {
- var executeStr="fn.call(this,@)";
- for(var i =0;i<fn.length;i++)
- {
- executeStr = executeStr.replace("@","args["+i+"],@");
- }
- executeStr=executeStr.replace(",@","");
- eval(executeStr);
- }
- function test()
- {
- //动态调用方法、并传递参数
- doCallback(callback2,['a','b']);
- doCallback(callback,['a','b','c']);
- }
最后发现、最佳的实现方式是:
- //回调函数1
- function callback(a,b,c)
- {
- alert(a+b+c);
- }
- //回调函数2
- function callback2(a,b)
- {
- alert(a+b);
- }
- //这个方法做了一些操作、然后调用回调函数
- function doCallback(fn,args)
- {
- fn.apply(this, args);
- }
- function test()
- {
- //动态调用方法、并传递参数
- doCallback(callback2,['a','b']);
- doCallback(callback,['a','b','c']);
- }
通过以上三种方法更加清晰的看到apply在javascript中的作用、以及其强大的功能