博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现一个EventEmitter类,这个类包含以下方法: on/ once/fire/off
阅读量:4921 次
发布时间:2019-06-11

本文共 1511 字,大约阅读时间需要 5 分钟。

实现一个EventEmitter类,这个类包含以下方法: on(监听事件,该事件可以被触发多次)- once(也是监听事件,但只能被触发一次)- fire(触发指定的事件)- off(移除指定事件的某个回调方法或者所有回调方法)
function EventEmitter() {    this.handlers = {}}//监听事件,该事件可以被触发多次EventEmitter.prototype.on = function (eventName, handle) {    if (!this.handlers.hasOwnProperty(eventName)) {        this.handlers[eventName] = []    }    this.handlers[eventName].push(handle)}//也是监听事件,但只能被触发一次EventEmitter.prototype.once = function (eventName, handle) {    }//触发指定的事件EventEmitter.prototype.fire = function (eventName, ...params) {    if (!this.handlers.hasOwnProperty(eventName)) return    //事件队列依次执行    this.handlers[eventName].map(handle => {        handle(...params)    })}//移除指定事件的某个回调方法或者所有回调方法EventEmitter.prototype.off = function (eventName, handle) {    if (!this.handlers.hasOwnProperty(eventName)) return    //获取下标,并删除    let index = this.handlers[eventName].indexOf(handle)    this.handlers[eventName].splice(index, 1)}const emitter = new EventEmitter();emitter.on('drink', (person) => {console.log(person + '喝水')})emitter.on('eat', (person) => {console.log(person + '吃东西')})// event.once('buy', (person) => {// console.log(person + '买东西')// })emitter.fire('drink', '我') // 我喝水emitter.fire('drink', '我') // 我喝水emitter.fire('eat', '其它人') // 其它人吃东西emitter.fire('eat', '其它人') // 其它人吃东西emitter.fire('buy', '其它人') //其它人买东西emitter.fire('buy', '其它人') //这里不会再次触发buy事件,因为once只能触发一次emitter.off('eat') //移除eat事件emitter.fire('eat', '其它人') //这里不会触发eat事件,因为已经移除了

  

转载于:https://www.cnblogs.com/yz-blog/p/11312596.html

你可能感兴趣的文章
Spring对HibernateSession的管理之封装SessionFactory
查看>>
awk-使用
查看>>
maven常用命令
查看>>
WPF制作多语言版本的程序
查看>>
SpringBoot读取application.properties文件
查看>>
一篇linux的通讯文章
查看>>
关于oracle中对已建表格进行约束的一些操作
查看>>
如何在CRichEditCtrl控件中直接读如RTF格式的文件
查看>>
win32 DirectUI控件开发与调用指南
查看>>
Linux系统通过AWS命令行上传文件至S3
查看>>
FlashFXP 上传文件错误
查看>>
Delphi 的内存操作函数(2): 给数组指针分配内存
查看>>
三款SDR平台对比:HackRF,bladeRF和USRP
查看>>
通过js获得html标签的值
查看>>
Sqoop 1.4.7安装与配置
查看>>
浅谈数据库资源使用的按需分配方法
查看>>
linux运维面试题1
查看>>
fabric网关模式文件上传与执行
查看>>
转:一千行 MySQL 学习笔记
查看>>
hadoop控制map个数(转)
查看>>