前端经常性会用到的addEventListener
和removeEventListener
,在这里使用class
进行一个简单的实现:
1. 实现分析
通过想象addEventListener
和removeEventListener
的功能,需要包含以下核心功能:
- 能够注册处理函数(handler function)
- 能够发布事件(emit event)
- 在发布事件的同时执行性已注册的处理函数,需要维护处理函数的事件的对应关系
- 能够移除处理函数
2. 代码实现
const noop = () => {
};
export class EventDemo {
constructor({
isCover}) {
this.__message__ = {
};
this.isCover = isCover; // listener添加的模式是覆盖还是追赠
}
// 注册事件
addEventListener(type, fn = noop) {
let curEvent = this.__message__[type];
if (Object.prototype.toString.call(curEvent) === '[object Undefined]' || this.isCover) {
curEvent = [fn];
} else {
// 是否已经添加了相同的listener
if (