From c8e941cff707fadaa2773a0c48a824b58159378e Mon Sep 17 00:00:00 2001 From: Sceat Date: Tue, 5 May 2020 22:11:48 +0200 Subject: [PATCH] supporting custom events --- lib/event-target.js | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/lib/event-target.js b/lib/event-target.js index a294b37a3..edac08e63 100644 --- a/lib/event-target.js +++ b/lib/event-target.js @@ -111,47 +111,51 @@ const EventTarget = { * * @param {String} method A string representing the event type to listen for * @param {Function} listener The listener to add - * @param {Object} [options] An options object specifies characteristics about the event listener + * @param {Object} [options] An options object specifies characteristics + * about the event listener * @public */ addEventListener(method, listener, options = {}) { if (typeof listener !== 'function') return; - const { once } = options; function onMessage(data) { listener.call(this, new MessageEvent(data, this)); - if(once) this.removeListener(method, listener); } function onClose(code, message) { listener.call(this, new CloseEvent(code, message, this)); - if(once) this.removeListener(method, listener); } function onError(error) { listener.call(this, new ErrorEvent(error, this)); - if(once) this.removeListener(method, listener); } function onOpen() { listener.call(this, new OpenEvent(this)); - if(once) this.removeListener(method, listener); } - if (method === 'message') { - onMessage._listener = listener; - this.on(method, onMessage); - } else if (method === 'close') { - onClose._listener = listener; - this.on(method, onClose); - } else if (method === 'error') { - onError._listener = listener; - this.on(method, onError); - } else if (method === 'open') { - onOpen._listener = listener; - this.on(method, onOpen); - } else { - this.on(method, listener); + const type = options.once ? 'once' : 'on'; + + switch (method) { + case 'message': + onMessage._listener = listener; + this[type](method, onMessage); + break; + case 'close': + onClose._listener = listener; + this[type](method, onClose); + break; + case 'error': + onError._listener = listener; + this[type](method, onError); + break; + case 'open': + onOpen._listener = listener; + this[type](method, onOpen); + break; + default: + this[type](method, listener); + break; } },