简易的观察者模式
所谓观察者模式,就是一对多的关系,一处调用多处实现,然后具备一些增删改的小功能。
源码
class Event{
constructor(){
this.handlers = {}
}
on(type,handler){
if(!this.handlers.hasOwnProperty(type)){
this.handlers[type] = [];
}
this.handlers[type].push(handler)
}
trigger(type,args){
if(Array.isArray(this.handlers[type])){
let handlers = this.handlers[type]
for(let i = 0 ,len = handlers.length;i<len;i++)
{
handlers[i](args)
}
}
}
off(type,handler){
if(Array.isArray(this.handlers[type])){
let handlers = this.handlers[type]
for(var i = 0 ,len = handlers.length;i<len;i++){
if(handlers[i] === handler)
{
break;
}
}
handlers.splice(i,1)
}
}
}
测试
var event = new Event();
var fn = function(){
console.log('fn')
}
event.on('aaa',()=>{console.log(123)})
event.on('aaa',()=>{console.log('bbb')})
event.on('aaa',(a)=>{console.log(a)})
event.on('aaa',fn)
event.on('b',(a)=>{console.log('bbbbbbbbb')})
event.trigger('aaa','bbbb')
event.trigger('b','bbbb')
console.log('---------------------------------------')
event.off('aaa',fn)
event.trigger('aaa','bbbb')