js - 发布订阅者模式
var eventCenter = { sub: function(name, callback) { this.argus = this.argus || {};//已经有事件用已经有的this.argus this.argus[name] = this.argus[name] || []; this.argus[name].push(callback);//对应添加的事件名已经有了就在加到该事件的数组中 }, pub: function(name, obj) { var args = Array.prototype.slice.call(arguments, 0);//arguments(Object)是传入的参数这里取到第一个;也可以直接通过函数传入参数的形式 var name = args.shift(); if (!this.argus || !this.argus[name]) {//没有传入参数就不往下执行 return this; } for (var i = 0; i < this.argus[name].length; i++) { this.argus[name][i].apply(this, args);//触发订阅事件的回调事件,apply(this, args)是为了拿到传入的参数;this.argus[name][i](args)也可以实现 } } }; export default eventCenter;
// 订阅事件 eventCenter.sub("a", function(res) {//添加事件 console.log(12345678,res) });
// 发布事件 eventCenter.pub("a", {name: 1});//触发订阅事件发送参数
总结:
eventCenter 可以在不同模块之间共享。A 模块发布事件, B 模块订阅
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)