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");