最近看到一个题目挺有意思的。自定义事件,也就是说用 on 监听过后,使用 fire 可以触发事件。这个其实就是观察者模式,也叫做发布/订阅模型(pub/sub)
题目:
1 |
|
实现代码:
1 | class EventEmitter { |
还有一个问题我还没解决
就是监听全部事件的功能
// 监听全部事件1
2
3emitter.on('*', function(e){
console.log('listening all events');
});
暂时还不会写。但是思路可以记录一下,意思是监听了 * 以后,不管 trigger 什么事件都会触发这个回调。
试着添加这个功能啊。已经在代码上添加了。
题外话
之前看高程22章讲过这个内容,但是代码很糟糕,我贴一点出来就知道了。trigger的数据结构并没有定义过target和type,非常乱的代码。1
2
3
4
5
6
7
8
9
10
11function trigger(eventName) {
if (!eventName.target) {
eventName.target = this
}
if (this.handlers[eventName.type] instanceof Array) {
var handlers = this.handlers[eventName.type]
for (var i = 0, len=handlers.length; i < len; i++) {
handlers[i](eventName)
}
}
},