博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js 发布订阅模式
阅读量:5895 次
发布时间:2019-06-19

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

//发布订阅模式class EventEmiter{    constructor(){        //维护一个对象        this._events={        }    }    on(eventName,callback){        if( this._events[eventName]){            //如果有就放一个新的            this._events[eventName].push(callback);        }else{            //如果没有就创建一个数组            this._events[eventName]=[callback]        }    }    emit(eventName,...rest){        if(this._events[eventName]){ //循环一次执行            this._events[eventName].forEach((item)=>{                item.apply(this,rest)            });        }    }    removeListener(eventName,callback){        if(this._events[eventName]){            //当前数组和传递过来的callback相等则移除掉            this._events[eventName]=                this._events[eventName].filter(item=>item!==callback);        }    }    once(eventName,callback){        function one(){            //在one函数运行原来的函数,只有将one清空            callback.apply(this,arguments);            //先绑定 执行后再删除            this.removeListener(eventName,one);        }        this.on(eventName,one);            //此时emit触发会执行此函数,会给这个函数传递rest参数    }}class Man extends EventEmiter{}let man=new Man()function findGirl() {    console.log('找新的女朋友')}function saveMoney() {    console.log('省钱')}man.once('失恋',findGirl);//man.on('失恋',findGirl) //失恋 ,绑定一个函数方法man.on('失恋',saveMoney)//失恋 ,绑定一个函数方法man.removeListener('失恋',saveMoney); //移除一个函数方法man.emit('失恋');//绑定一次,触发多次,也只执行一次。触发后一次将数组中的哪一项删除掉下次触发就不会执行

 

转载于:https://www.cnblogs.com/null11/p/7498820.html

你可能感兴趣的文章
Scribes:小型文本编辑器,支持远程编辑
查看>>
ssh 安装笔记
查看>>
游戏音效下载网站大全
查看>>
实验五
查看>>
3-继承
查看>>
海归千千万 为何再无钱学森
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
JSP----九大内置对象
查看>>
Java中HashMap详解
查看>>
delphi基本语法
查看>>
沙盒目录介绍
查看>>
260. Single Number III
查看>>
Hadoop生态圈-Kafka的完全分布式部署
查看>>
css的border的solid
查看>>
[MODx] Build a CMP (Custom manager page) using MIGX in MODX 2.3 -- 1
查看>>
jQuery自动完成点击html元素
查看>>
[算法]基于分区最近点算法的二维平面
查看>>
webpack多页应用架构系列(七):开发环境、生产环境傻傻分不清楚?
查看>>
笨办法学C 练习1:启用编译器
查看>>
树的总结--树的性质(树的深度) leetcode
查看>>