一个简单的 EventEmitter,可在浏览器中使用,帮助你实现事件的订阅和发布。
原生 JavaScipt 实现,无依赖。
压缩后 1KB,gzip 压缩后更小。
<scriptsrc="path/eventEmitter.js"></script>
或者
importeventEmitterfrom'path/eventEmitter.js'
varemitter=newEventEmitter();
添加一个事件监听器,支持链式调用
emitter.on(eventName,listener)
- eventName 事件名称
- listener 监听器函数
删除一个事件监听器,支持链式调用
emitter.off(eventName,listener)
- eventName 事件名称
- listener 监听器函数
添加一个只能触发一次的事件监听器,支持链式调用
emitter.once(eventName,listener)
- eventName 事件名称
- listener 监听器函数
触发事件,支持链式调用
emitter.emit(eventName,args)
- eventName 事件名称
- arg 数组形式,传入事件监听器的参数
删除某个事件或者所有事件
emitter.allOff(eventName)
- eventName 事件名称 如果不传,则删除所有事件
varemitter=newEventEmitter();functionhandleOne(a,b,c){console.log('第一个监听函数',a,b,c)}functionhandleSecond(a,b,c){console.log('第二个监听函数',a,b,c)}functionhandleThird(a,b,c){console.log('第三个监听函数',a,b,c)}emitter.on("demo",handleOne).once("demo",handleSecond).on("demo",handleThird);emitter.emit('demo',[1,2,3]);// => 第一个监听函数 1 2 3// => 第二个监听函数 1 2 3// => 第三个监听函数 1 2 3emitter.off('demo',handleThird);emitter.emit('demo',[1,2,3]);// => 第一个监听函数 1 2 3emitter.allOff();emitter.emit('demo',[1,2,3]);// nothing
varemitter=newEventEmitter();functionhandleOne(a,b,c){console.log('第一个监听函数',a,b,c)emitter.off("demo",handleSecond)}functionhandleSecond(a,b,c){console.log('第二个监听函数',a,b,c)}functionhandleThird(a,b,c){console.log('第三个监听函数',a,b,c)}emitter.on("demo",handleOne).on("demo",handleSecond).on("demo",handleThird);emitter.emit('demo',[1,2,3]);// => 第一个监听函数 1 2 3// => 第三个监听函数 1 2 3