
本文主要是实现发布订阅模式,其实发布订阅模式比较简单,这里只是说下大致的方法含义
1. 直接上代码
function EventEmitter() {this.pool = {}}EventEmitter.prototype.on = function (name, fn) {if (!this.pool) this.pool = {}const stack = this.pool[name] || (this.pool[name] = [])if (stack.includes(fn)) return falsestack.push(fn)return true}EventEmitter.prototype.emit = function (name) {const stack = this.pool[name]if (!stack || !Array.isArray(stack)) return falseconst args = [].slice.call(arguments, 1)stack.forEach((fn) => fn(...args))return true}EventEmitter.prototype.off = function (name, fn) {const stack = this.pool[name]if (!stack) return falseif (fn) {this.pool[name] = stack.filter((item) => item !== fn && item.l !== fn)return true}this.pool[name] = []return true}EventEmitter.prototype.once = function (name, fn) {const handle = (...args) => {fn(...args)this.off(name, fn)}handle.l = fnthis.on(name, handle)}
2. 方法介绍
- on — 进行方法的订阅
- emit — 进行方法的提交发射,主要是函数的执行
- off — 取消订阅
- once — 进行方法的一次绑定,执行后自动解绑
