实现一个EventEmitter类,这个类包含以下方法: on/ once/fire/off
发布日期:2021-08-14 18:04:31 浏览次数:3 分类:技术文章

本文共 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

转载地址:https://blog.csdn.net/weixin_30731305/article/details/101110094 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Javascript 词法分析
下一篇:前端移动端开发总结(Vue)

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年11月14日 01时09分49秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Android请求头带字符编码,Android – 使用带有请求标头的网址打开浏览器 2019-06-17
android获取webview源码,在WebView中获取网页源码 2019-06-17
android按钮扁平化,【中字】谷歌Material Design:拟物扁平化 2019-06-17
android 数据传输助手,MacDroid for mac(安卓手机数据传输助手) 2019-06-17
android自定义转盘效果,利用Android自定义View实现转盘旋转的效果 2019-06-17
android 5.0 ios 8,Android 5.0 Lollipop拥有 iOS 8欠缺的八大功能 2019-06-17
自学 html 基础标签,HTML 基础 2019-06-17
使用javax.swing.text.html包解析html文档,javax w3c 网页解析(一) 2019-06-17
html为什么图片有的显示不出来,网页显示不出图片怎么办 6种常见的解决方案详解... 2019-06-17
在线html5 花,HTML5 飞舞的花朵 2019-06-17
html文件上传漏洞,文件上传漏洞(绕过姿势) 2019-06-17
html5设置动画时钟,html5绘制时钟动画 2019-06-17
计算机应用基础网络统考操作,(全套)知识点练习-计算机应用基础-(网络统考-操作题-共152题)... 2019-06-17
免费html模板bootstrap,20款最好的免费 Bootstrap 后台管理和前端模板 2019-06-17
计算机的网络配置的方法是什么,怎么配置计算机网络 2019-06-17
【数据结构】KMP算法 2019-06-17
【Pandas】list,nparray,和pandas dataframe的互相转换 2019-06-17
【推荐系统】Criteo数据集介绍 2019-06-17
【Pytorch】torch加载数据(1) 2019-06-17
【Pytorch】transforms的使用(2 CV领域) 2019-06-17