Node EventEmmiter 事件触发

发布于 2024-11-22 15:46:02 字数 1024 浏览 10 评论 0

来源:https://github.com/Yuxin-Alpha/Frontend-Learning/issues/28

所有能触发事件​的对象都是 EventEmitter 类的实例,Node 中的 events 模块用于事件发射以及监听,是 Node 实现发布订阅模式的典型例子。

const EventEmmiter = require('events')
const util = require('util')
function Bell() {
  EventEmmiter.call(this); // 继承私有属性
}

// 原型继承
// Object.setPrototypeOf()
util.inherits(Bell, EventEmmiter)

function studentInClassroom() {
  console.log('学生进教室');
}

function teacherInClassroom() {
  console.log('老师进教室');
}
// Bell 继承了事件发射器的类之后就拥有了其原型上面的所有方法
let bell = new Bell();
bell.on('响', studentInClassroom);
bell.on('响', teacherInClassroom);
bell.emit('响')

一个事件发射器对象,通过 on() 函数来监听, emit() 函数来触发事件,触发了之后使 on() 函数后面中的回调函数进入事件队列等待主线程执行。

EventEmmiter 对象除了上述两个方法之外还有下列方法:

  • addListener(event, listener) : 对指定事件绑定指定处理函数
  • once(event, listener) : 对指定事件只执行一次的事件处理函数
  • removeListener(event, listener) : 对指定事件解除事件事件处理函数

下面笔者自己一下手撕这些 API:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

征棹

暂无简介

文章
评论
29 人气
更多

推荐作者

5576443447

文章 0 评论 0

酒几许

文章 0 评论 0

xiaolangfanhua

文章 0 评论 0

好久不见√

文章 0 评论 0

盗心人

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文