下面小编就为大家带来一篇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('失恋');
//绑定一次,触发多次,也只执行一次。触发后一次将数组中的哪一项删除掉下次触发就不会执行
以上就是javascript发布订阅模式用法详解的详细内容。