JSFiddle - React, Tailwind, and code Playground
by kalinin sergey
JavaScript
class Events {
constructor () {
this.listeners = {}
}
get (event) {
return this.listeners[event] || (this.listeners[event] = new Set())
}
addListener (event, listener) {
console.log('addListener start');
this.get(event).add(listener)
}
removeListener (event, listener) {
this.get(event).delete(listener)
}
trigger (event, ...args) {
console.log('trigger start');
this.get(event).forEach(listener => listener(...args))
}
}
class DOMelement {
constructor() {
console.log('construct dom element');
}
}
class WINDOWelement {
constructor() {
console.log('construct window element');
// user click simulation
setTimeout(() => {
console.log('user click to dom element');
this.trigger('click');
}, 3000);
}
}
const events = new Events();
const domElement = new DOMelement();
const windowElement = new WINDOWelement();
domElement.__proto__ = events;
windowElement.__proto__ = events;
domElement.addListener('click', () => { console.log('is clicked') });