所有事件都具有侦听器数组,还是所有“发射器”都具有侦听器数组?

时间:2020-07-02 12:22:32

标签: javascript node.js

我正在浏览节点文档,并试图了解此功能

server.on('connection', (stream) => {
  console.log('someone connected!');
});

emitter.on(eventName, listener)

我感到困惑的部分是这个;特定部分以粗体显示。 “将侦听器函数添加到 名为eventName的事件的侦听器数组的末尾。”

for是否表示所有发射器(在本例中是服务器)都有一个侦听器数组,并且该数组中的某些功能“针对”某些事件(如指定)。或者,这是否意味着所有事件都有一个侦听器数组,并且只会将此函数(流)添加到事件“连接”中。

如果是后者,那么eventlistenerarray [lastindex aka(stream)]如何知道它仅在事件在Emmiter ...服务器上发生时才运行?

2 个答案:

答案 0 :(得分:1)

TL; TR:

您为每个对象附加了事件以存储自己的事件(独立于其他对象)

_每个事件名称具有其自己的(有序)函数数组(独立于同一对象中的其他事件)

详细信息:

您可以很好地举例说明它的结构和存储在this section of the Node documentation on events

const myEmitter = new MyEmitter();
myEmitter.on('myEvent', function(a, b) {
  console.log(a, b, this, this === myEmitter);
  // Prints:
  //   a b MyEmitter {
  //     domain: null,
  //     _events: { myEvent: [Function] },
  //     _eventsCount: 1,
  //     _maxListeners: undefined } true
});
myEmitter.emit('myEvent', 'a', 'b');

您可以看到,当记录this(事件已附加到的对象)时,事件处理程序将存储在对象本身内部(在属性_events中)。它采用对象的形式,其中所有事件名称都是键,而值是该事件附带的所有函数的数组。这是数组的事实很重要,因为函数将被同步调用并按添加顺序被调用。

答案 1 :(得分:0)

发射器(在本例中为服务器)跟踪所有连接的事件侦听器,没有全局事件侦听器数组。