首页 > 编程 > JavaScript > 正文

js 发布订阅模式的实例讲解

2019-11-19 15:29:56
字体:
来源:转载
供稿:网友

废话不多说,直接上代码

//发布订阅模式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 发布订阅模式的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表