Node.js EventEmitter.removeListener() 方法详解

作者:接口漫谈

时间:2026-10-28

浏览:520

本文介绍Node.js中events模块的removeListener方法,用于移除指定事件的特定监听器。该方法接收事件类型字符串和已注册的监听器函数作为参数。通过示例展示了如何注册并移除监听器,同时深入解析了底层源码逻辑,包括对监听器类型的校验、单监听器与多监听器数组的处理机制,以及移除成功时触发'removeListener'事件的流程。

文章目录

Node.js中events.emitter.removeListener方法使用说明

方法概述:

删除特定事件对应的指定监听函数。

语法格式:

示例代码:

emitter.removeListener(event, listener)

参数说明:

event (string) 事件名称

listener (function) 先前注册的监听函数

示例演示:

示例代码:

var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);

底层源码:

示例代码:

// 仅当监听器被移除时触发 'removeListener' 事件
EventEmitter.prototype.removeListener = function(type, listener) {
var list, position, length, i;
if (!util.isFunction(listener))
throw TypeError('listener must be a function');
if (!this._events || !this._events[type])
return this;
list = this._events[type];
length = list.length;
position = -1;
if (list === listener ||
(util.isFunction(list.listener) && list.listener === listener)) {
delete this._events[type];
if (this._events.removeListener)
this.emit('removeListener', type, listener);
} else if (util.isObject(list)) {
for (i = length; i-- > 0;) {
if (list[i] === listener ||
(list[i].listener && list[i].listener === listener)) {
position = i;
break;
      }
    }
if (position < 0)
return this;
if (list.length === 1) {
list.length = 0;
delete this._events[type];
} else {
list.splice(position, 1);
    }
if (this._events.removeListener)
this.emit('removeListener', type, listener);
  }
return this;
};

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章