I came across the following class definition in Javascript:
class FakeWebSocket {
constructor(url) {
this.url = url;
console.log('connecting to ' + url);
let i = 0;
this.id = setInterval(() => this.triggerMessage(i++), 500);
}
close() {
console.log('closing connection to ' + this.url);
clearInterval(this.id);
}
addEventListener(name, handler) {
const listeners = this.listeners = this.listeners || {};
const handlers = listeners[name] = listeners[name] || [];
handlers.push(handler);
}
addEventListener(name, handler) {
const listeners = this.listeners = this.listeners || {};
const handlers = listeners[name] = listeners[name] || [];
handlers.push(handler);
}
triggerMessage(msg) {
const listeners = this.listeners;
if (listeners) {
const handlers = listeners['message'];
handlers.forEach(handler => handler({ target: this, data: JSON.stringify(msg) }))
}
}
}
const source = new Observable((observer) => {
const socket = new FakeWebSocket('ws://someurl');
socket.addEventListener('message', (e) => observer.next(e));
return () => socket.close();
});
My problem is with the line :
const listeners = this.listeners = this.listeners || {};
Which I interpret as assigning to the constant listeners, itself to which you assign itself or a new object. It does not make any sense to me. I don't see where this.listeners comes from and what the syntax means. Could anybody clarify it?