Skip to content

Instantly share code, notes, and snippets.

@pastleo
Created October 18, 2019 09:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pastleo/7e1c332666834a2dbeb724e61a9bd0d5 to your computer and use it in GitHub Desktop.
Save pastleo/7e1c332666834a2dbeb724e61a9bd0d5 to your computer and use it in GitHub Desktop.
experiments about EventTarget and nodejs polyfill
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