EventEmitter只是简单地映射对象中的函数吗?

时间:2017-04-17 10:21:31

标签: javascript node.js events eventemitter

例如

var event = {
    message: function(message){console.log(message);}
}

//polling here
{
    if(response.type == "message")
    {
        event[response.type](response.message);
    }
}

应该与

类似
events.on("message", function(message){console.log(message);});

//polling here
{
    events.emit(response.type, response.message);
}

如果没有,除.once等辅助功能外,它与EventEmitter有什么不同?

我出于不同的原因同时使用两者。 EventEmitter用于事件驱动的函数,而event对象用于保持一组有组织的函数从单个上下文(event)触发。

编辑:

修改代码以使用多个函数/侦听器。

var event = {
    message: []
}

event.message.push(function(message){console.log(message)});

//polling here
{
    if(response.type == "message")
    {
        for(var func in event[response.type])
        {
            event[response.type][func](response.message);
        }

    }
}

1 个答案:

答案 0 :(得分:1)

嗯,从更广泛的角度来看,它确实是一个对象(EvenEmitter类),它公开了一组方法,用于将侦听器函数注册到一个事件,还可以删除那些侦听器函数,以及其他各种改变它内部的函数。关闭事件对象。

除此之外,所有那些触发事件的核心模块都继承自EventEmitter类,从而获得对中央事件对象的访问权。 因此,是的,它确实将函数映射到对象。