EventEmitter

538 阅读1分钟

实现一个EventEmitter类

                class EventEmitter {
		    constructor() {
		        this._events = {}
		    }
		    on(eventName,callback) {
		    	let callbacks = eventName in this._events ? this._events[eventName] : [];
		    	callbacks.push(callback)
		    	this._events[eventName] = callbacks
		    }
		    emit(eventName,...args) {
		    	const callbacks = this._events[eventName]
	                callbacks.map(cb => {
	                    cb(...args)
	                })
		    }
		    off(eventName, callback) {
	                if (!eventName in this._events) return
	                let callbacks = this._events[eventName]
	                let index = callbacks.indexOf(callback)
	                callbacks.splice(index, 1)
       		    }

		}

		const emitter = new EventEmitter()
		const sayHi = (name) => console.log(`Hello ${name}`)
		emitter.on('hi', sayHi)
		emitter.emit('hi', 'nwd')
		emitter.off('hi', sayHi)
		emitter.emit('hi', '您好')