Javascript 向事件发射器侦听器发送任意数量的参数

Javascript 向事件发射器侦听器发送任意数量的参数,javascript,node.js,Javascript,Node.js,因此,我尝试创建一个函数,它接受参数,将参数转换为数组,然后从数组中选择第一个元素作为事件,然后将其余元素作为参数传递 例如: // _ is the underscore module // emitter = new events.EventEmitter() function sendToEmitter = function(){ var args = _.toArray(arguments), event = args[0], rest = a

因此,我尝试创建一个函数,它接受参数,将参数转换为数组,然后从数组中选择第一个元素作为事件,然后将其余元素作为参数传递

例如:

// _ is the underscore module
// emitter = new events.EventEmitter()
function sendToEmitter = function(){
    var args  = _.toArray(arguments),
        event = args[0],
        rest  = args.slice(1);
    emitter.emit(event, rest) 
我不知道如何将rest作为单独的参数传递给侦听器函数


在python中,我可以简单地将它转换为一个元组,并用*。我不确定JavaScript是否有类似的功能。有没有办法做到这一点?我相信。也许可以申请。打电话?可以,但我不确定如何将参数应用于侦听器。

基本上,您要做的是将数组作为多个参数传递给函数

你可以用


类似于emitter.emit.applyemitter、[event,args]的东西可能会起作用,但不清楚如何添加参数,apply接受一个参数数组,因此可以传递它,去掉事件参数的原因我还不清楚?@adeneo我想把它们分开,添加一些默认参数,这样我就不必每次都键入它们,但我对这个问题考虑得太多了,我没有意识到我可以使用。直接在emit函数上应用。哇,好的。谢谢你,我有一个愚蠢的时刻,我想得太多了。如果时间允许,我会尽快接受这个答案。如果您关心代码所在的函数,那么应该避免将参数传递给另一个函数。传递参数是导致泄漏的一种方式,至少在v8的情况下,javascript引擎将对该函数进行去优化。有关更多信息、示例和解决方案,请参阅。@mscdex:您链接到的文章中说,不要直接使用没有.length或[i]严格意义上的x.applyy的参数,参数是可以的,没有其他的,例如.slice。功能性是special@FelixKling在我链接到它的部分中明确指出,arguments对象不能在任何地方传递或泄漏。另外,正如我提到的,u.toArray对传入的值调用[].slice。因此,如果您关心该特定代码段的v8性能,那么这里有两个要点。@msdex:对,但直接将其传递给.apply是可以的。
var args  = _.toArray(arguments),
emitter.emit.apply(emitter, args);