之前因为开发中需要在自己的函数中增加一个事件处理机制。可惜在浏览器环境下只能自定义,如果在nodejs
环境下可以继承自Event
对象。
那么如何自己做一个Event
类呢?
分析需求:
- 绑定事件 : on
- 触发事件 : fire
- 移除事件 : remove
假设设计的api是这样的:1
2
3
4
5
6
7
8// 绑定事件
Event.on('some-event',handleFunc);
// 触发事件
Event.fire('some-event');
// 移除事件
Event.remove('some-event');
那么具体内部如何实现呢?
首先,我们需要一个东西保存这个事件名和事件名对应的函数。
1 | function Event(){ |
上面是绑定事件,其实按照思路写下来也是很简单的。下面是触发事件。
1 | Event.prototype.fire = function(eventName){ |
到此,触发也就写好了,注意,这里我都是使用了forEach方法,这个方法在IE8以下不支持,需要改成for in
方法。
其他的remove
或者once
等,也是在此基础上,比如remove
就是找到之后删掉对应的方法,once
是增加一个选项,在事件触发之后去掉该事件。