| javaScript 中的订阅发布模式(也称为观察者模式)是一种设计模式,用于在对象之间的事件通信中。 |
| |
| 该模式由两部分构成:发布者和订阅者。发布者持有所有订阅者的引用,在某个事件发生时通知所有的订阅者,从而触发它们的相应行为。 |
| |
| 这种模式可以用于解耦发布者和订阅者之间的依赖关系,从而实现更加灵活的设计 |
实现事件的订阅发布
| class EventBus { |
| constructor() { |
| this._events = {}; |
| } |
| |
| |
| on(eventname, fn) { |
| if (!this._events[eventname]) { |
| this._events[eventname] = []; |
| } |
| this._events[eventname].push(fn); |
| } |
| |
| |
| off(eventname, fn) { |
| if (!this._events[eventname]) return; |
| if (!fn) { |
| this._events[eventname] = undefined; |
| } else { |
| this._events[eventname] = this._events[eventname].filter( |
| (item) => item != fn |
| ); |
| } |
| } |
| |
| |
| emit(eventname) { |
| if (!this._events[eventname]) return; |
| this._events[eventname].forEach((item) => item()); |
| } |
| |
| |
| once(eventname, fn) { |
| const cb = (...args) => { |
| fn(...args); |
| this.off(eventname, cb); |
| }; |
| this.on(eventname, cb); |
| } |
| } |
使用
| function fn4() { |
| console.log("我是事件 fn4"); |
| } |
| |
| function fn5() { |
| console.log("我是事件 fn5"); |
| } |
| |
| function fn6() { |
| console.log("我是事件 fn6"); |
| } |
| |
| const car = new EventBus(); |
| |
| car.on("click", fn4); |
| car.on("click", fn5); |
| |
| car.off("click", fn4); |
| |
| car.emit("click"); |
| |
| car.once("get", fn6); |
| |
| car.emit("get"); |
| |
| console.log("car", car); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!