event
by imys
JavaScript
function Bus() {}
Bus.prototype = {
constructor: Bus,
events: {},
on: function(name, fn) {
this.events[name] = this.events[name] || []
this.events[name].push(fn)
},
off: function(name, fn) {
if(!fn) {
delete this.events[name]
return
}
this.events[name] = this.events[name].filter(item => item !== fn)
},
emit: function() {
var _this = this;
var name = [].shift.call(arguments, 1)
var args = arguments
var events = this.events[name]
if(!events) {
console.warn(name, '未注册')
return
}
events.forEach(function(fn){
fn.apply(_this, args)
})
}
}
const bus = new Bus()
const one = () => console.log(1, 'one')
bus.on('one', one)
bus.on('one', str => console.log(2, str))
bus.emit('one', '11111')
// 1 "one"
// 2 "11111"
bus.off('one', one)
bus.emit('one', '22222') // 2 "22222"
bus.off('one')
bus.emit('one', '33333') // one 未注册