js 发布订阅模式的实例讲解
废话不多说,直接上代码
//发布订阅模式
classEventEmiter{
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){
functionone(){
//在one函数运行原来的函数,只有将one清空
callback.apply(this,arguments);
//先绑定执行后再删除
this.removeListener(eventName,one);
}
this.on(eventName,one);
//此时emit触发会执行此函数,会给这个函数传递rest参数
}
}
classManextendsEventEmiter{}
letman=newMan()
functionfindGirl(){
console.log('找新的女朋友')
}
functionsaveMoney(){
console.log('省钱')
}
man.once('失恋',findGirl);
//man.on('失恋',findGirl)//失恋,绑定一个函数方法
man.on('失恋',saveMoney)//失恋,绑定一个函数方法
man.removeListener('失恋',saveMoney);//移除一个函数方法
man.emit('失恋');
//绑定一次,触发多次,也只执行一次。触发后一次将数组中的哪一项删除掉下次触发就不会执行
以上这篇js发布订阅模式的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
热门推荐
1 训练狗狗基础
2 怎么训练狗狗笑
3 怎么训练狗狗卧下
4 上海狗狗训练基地
5 训练狗狗排便
6 狗狗基础训练
8 如何训练狗狗装死
9 狗狗站姿训练
10 狗狗训练用品
11 训练狗狗吧
12 狗狗要怎么训练
13 怎么训练狗狗玩球
14 训练狗狗唤回
15 狗狗训练躺下
16 狗狗训练指令
17 狗狗的训练技巧
18 狗狗不好训练