分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

js 发布订阅模式

发布时间:2023-09-06 01:07责任编辑:胡小海关键词:js
//发布订阅模式
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(‘失恋‘);
//绑定一次,触发多次,也只执行一次。触发后一次将数组中的哪一项删除掉下次触发就不会执行

js 发布订阅模式

原文地址:http://www.cnblogs.com/null11/p/7498820.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved