在
javascript中是否有一种方法可以调用具有未知数量参数的回调?
function invokeCallback(callback,params) { return callback.invoke(params); }
如果这些是我们的示例回调方法:
function action() { doSomeAction(); } function greet(msg) { console.log(msg); } function nameage(name,age) { var msg = 'My name is ' + name + ' and my age is ' + age; console.log(msg); }
如果我们可以轻易地这样称呼他们:
invokeCallback(action); invokeCallback(greet,'Hello!'); invokeCallback(nameage,'Bob',20);
那会很棒.
这样的事情可能吗?
解决方法
正如其他答案中已经提到的,Function.prototype.apply和
Function.prototype.call是您想要查看的两种方法.它们的操作方式略有不同 – apply将参数作为单个数组,而call将它们作为单独的参数.
您可能希望探索使用此技术的相关概念是currying.
关于你的例子,你应该看看从你的函数定义中删除params参数并消除open参数,它是回调函数本身:
function invokeCallback(callback) { var params = Array.prototype.slice.call(arguments,1); return callback.apply(this,params); }