题目
实现一个 SimpleEventEmitter,支持 trigger、once、on、off 方法
代码
class SimpleEimtter {constructor(el) {this.emits = {}this.el = el;this.el.addEventListener('click',this.click);}click = (event) => {//必须要在相应的事件函数中调用执行函数this.trigger('click', event, this.el);}on(eventName, callback, once) {if(!this.emits[eventName]) {this.emits[eventName] = {};this.emits[eventName]['fn'] = callback;this.emits[eventName]['once'] = once;}}once() {this.on(...arguments, true);}off(eventName) {if (this.emits[eventName]) {this.emits[eventName]['fn'] = null;}}trigger(eventName, ...rest) {if (this.emits[eventName] && this.emits[eventName]['fn']) {this.emits[eventName]['fn'].apply(this, rest);// once执行后解除绑定this.emits[eventName]['once'] && this.off(eventName)}}}export default SimpleEimtter;
let box = document.getElementById('box');
let box2 = document.getElementById('box2');
let m = new SimpleEimtter(box);
let m2 = new SimpleEimtter(box2);
m.on('click', function(a, b){
console.log('on', 'box1', a, b)
})
m2.once('click',function(){
console.log('once');
m.trigger('click', 'trigger m click', '3', 4, 5);
m.off('click');
})
