Created
October 18, 2019 09:27
-
-
Save pastleo/7e1c332666834a2dbeb724e61a9bd0d5 to your computer and use it in GitHub Desktop.
experiments about EventTarget and nodejs polyfill
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const isBrowser = (function() { | |
try { return !!window; } catch (_) { return false; } | |
})(); | |
if (isBrowser) { | |
window.global = window; | |
} | |
const Event = isBrowser ? class extends window.Event { | |
constructor(type, payload) { | |
super(type); | |
this.payload = payload; | |
} | |
} : class { | |
constructor(type, payload) { | |
this.type = type; | |
this.payload = payload; | |
} | |
}; | |
const EventTarget = isBrowser ? window.EventTarget : class extends require('events') { | |
addEventListener(type, handler) { | |
return this.addListener(type, handler); | |
} | |
dispatchEvent(event) { | |
return this.emit(event.type, event); | |
} | |
removeEventListener(type, handler) { | |
return this.removeListener(type, handler); | |
} | |
}; | |
// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget | |
// https://developer.mozilla.org/en-US/docs/Web/API/Event | |
// https://nodejs.org/api/events.html#events_class_eventemitter | |
console.group('test EventTarget'); | |
const someEventTarget = new EventTarget(); | |
someEventTarget.addEventListener('hello', console.log); | |
someEventTarget.dispatchEvent(new Event('hello', { a: 123 })); | |
someEventTarget.removeEventListener('hello', console.log); | |
someEventTarget.dispatchEvent(new Event('hello', { a: 123 })); | |
console.groupEnd(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment