报错信息:如果用同一个函数监听同一个事件多次,off 的时候只删除一次,如何解决?


  • 0

    class EventEmitter {
    constructor() {
    this.funcList = {}
    }

    		on(key, func) {
    			if(!this.funcList[key]) {
    				this.funcList[key] = []
    			}
    			this.funcList[key].push(func)
    		}
    
    		emit() {
    			let key = Array.prototype.shift.call(arguments)
    			let fns = this.funcList[key]
    			if(!fns || fns.length === 0) {
    				return false
    			}
    			this.funcList[key].forEach((func) => func.apply(this, arguments))
    		}
    
    		off(key, func) {
    			let fns = this.funcList[key] 
    			if(!fns) return
    			if(!func) {//不指定fn时,全部清空key事件的回调函数
    				fns && (fns.length = 0) 
    			}else {//如果指定fn,则删除指定的回调函数
    				for(let l = fns.length - 1; l >= 0; l--) {
    					var _fn = fns[l]
    					if(_fn === func) {
    						fns.splice(l, 1)
    					}
    				}
    			}
    		}
    	}

登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待