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

以上是 js 发布订阅模式的实例讲解 的全部内容, 来源链接: utcz.com/z/313699.html

回到顶部