简单模拟发布订阅模式之on、once、off、emit、clear
简单模拟发布订阅模式之on、once、off、emit、clear
clasventBus{
constructor(){
={}
}
on(key,fn){
y([key])?[key].push(fn):[key]=[fn]
}
once(key,fn){
letvm=this
functioncurOnce(){
(key,fn)
(key,curOnce)
}
=fn//once函数上的标识函数:移除curOnce,同时移除fn
(key,curOnce)
}
emit(key,fn){
if(!y([key])||![key].length)return
if(typeoffn!=='function'){
[key].forEach(f=>f())
}el{
//===fn:这⾥的判断是处理once指定的函数,请看这⾥:=fn
[key].forEach(f=>(f===fn||===fn)&&fn())
}
}
off(key,fn){
if(!y([key])||![key].length)return
if(typeoffn!=='function'){
(key)
}el{
constindex=[key].findIndex(f=>f===fn||===fn)
if(index!==-1)[key].splice(index,1)
}
}
clear(key){
if([key])[key]=[]
}
}
functionaaa(){
('aaa');
}
functiononcefn(){
('oncefn');
}
functiononcefn22(){
('oncefn22');
}
constBus=neweventBus()
//测试on
//('aaa',aaa)
//('aaa',oncefn22)
//测试clear
//('aaa')
//('aaa',aaa)
//('aaa',oncefn22)
//('aaa')
//测试once
('once',oncefn)
('once',oncefn22)
//测试clear
//('once')
//('once',oncefn)
//('once',oncefn22)
('once')
('once')
//测试移除绑定的on
//('aaa',aaa)
//('aaa')
//测试移除绑定的once
//('once',oncefn22)
//('once',oncefn22)
//('Bus:',Bus);
本文发布于:2023-01-20 14:45:35,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/101833.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |