Node.js EventEmitter.removeListener() 方法详解
作者:接口漫谈时间:2026-10-28 17:28:05浏览:521
本文介绍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;
};作者最新文章
全栈开发中JavaScript与Java怎么协作?前后端技术栈配合解析
2026-11-04 11:08:24
Node.js官网访问慢?国内镜像加速下载方案
2026-11-03 18:57:24
Node.js 连接 MySQL 数据库实现增删改查操作
2026-11-03 14:31:14
Windows系统安装Node.js:下载、配置与环境验证
2026-11-03 14:15:56
Linux (Ubuntu/CentOS) 环境下安装Node.js的常用方法
2026-11-03 10:18:39
