为了账号安全,请及时绑定邮箱和手机立即绑定

所有事件都有一个监听器数组还是所有“发射器”都有一个监听器数组?

所有事件都有一个监听器数组还是所有“发射器”都有一个监听器数组?

动漫人物 2022-10-27 15:38:38
我正在查看节点文档并尝试了解此功能server.on('connection', (stream) => {  console.log('someone connected!');});emitter.on(eventName, listener)我感到困惑的部分是这个;具体部分加粗。"将侦听器函数添加到名为 eventName 的事件的侦听器数组的末尾。"for 是否意味着所有发射器(在本例中是服务器)都有一个侦听器数组,并且该数组中的一些函数是“用于”(指定给)某些事件的。或者,这是否意味着所有事件都有一个侦听器数组,并且它只会将此函数(流)添加到“连接”事件中。如果是后者,那么 eventlistenerarray[lastindex aka (stream)] 如何知道它仅在事件发生在 emmiter... 服务器上时才运行在这种情况下
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

_每个你附加事件的对象来存储它们自己的事件(独立于其他对象)

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

细节:

您在有关事件的节点文档的这一部分中有一个很好的例子来说明它的结构和存储方式

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)。它是对象的形式,其中所有事件名称都是键,值是附加到事件的所有函数的数组。它在这里是一个数组这一事实很重要,因为函数将按照它们被添加的顺序被同步调用。


查看完整回答
反对 回复 2022-10-27
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

发射器(在这种情况下是服务器)跟踪所有附加的事件侦听器,没有全局事件侦听器数组。



查看完整回答
反对 回复 2022-10-27
  • 2 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信