interface CacheProps {
[key: string]: Array<((data:unknown) => void)>;
}
class Observer {
private caches:CacheProps = {};
on(eventName: string,fn:((data?:unknown) => void)) {
this.caches[eventName] = this.caches[eventName]?this.caches[eventName]:[];
this.caches[eventName].push(fn);
}
emit(eventName: string,data?:unknown) {
if(this.caches[eventName]) {
this.caches[eventName].forEach((fn)=> {
fn(data);
})
} else {
return {
flag: false,
errMsg: "不存在该函数"
}
}
}
off(eventName:string,fn:((data?:unknown) => void)) {
if(this.caches[eventName]) {
const newCaches = fn?this.caches[eventName].filter(e => e !== fn):[];
this.caches[eventName] = newCaches;
}
}
}
function a() {
console.log(4);
}
const obj:Observer = new Observer();
obj.on("aaa",()=>{console.log(3)});
obj.on("aaa",()=>{console.log(3)});
obj.on("aaa",a);
console.log(obj)
obj.off("aaa",a);
obj.emit("aaa");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了