¡usted me podría ayudar! En el método de emisión , cómo verificar si llaman al método de sala anterior o no.
En los dos casos siguientes:
// case 1: A.room('aa').emit('a1', 'aaa') // case 2: A.emit('a2', 'aaa')esta es una clase a
class A { static room(r) { this.r = r return this } static emit(event, data) { //todo console.log('this.r', this.r, {event, data}) } }¡Gracias por tu tiempo!
Debe almacenar valores de flujo como r por separado para cada llamada, lo cual no es un objetivo razonable para las clases estáticas porque usa la misma clase una y otra vez, en lugar de instancias separadas. Soluciones posibles:
1. Ya no static :
class A { room(r) { this.r = r return this } emit(event, data) { console.log('this.r', this.r, {event, data}) } } new A().room('aa').emit('a1', 'aaa') // r = 'aa' new A().emit('a2', 'aaa') // r = undefined 2. Devolver instancias con alcances propios ( A se mantiene estático):
class A { static room(r) { return new B(r) } static emit(...args) { return new B().emit(...args) } } class B { constructor(r) { this.r = r } emit(event, data) { console.log('this.r', this.r, {event, data}) return this } } A.room('aa').emit('a1', 'aaa') // r = 'aa' A.emit('a2', 'aaa') // r = undefined 3. Delegue la lógica a la clase no estática ( A se mantiene estática):
class B { room(r) { this.r = r return this } emit(event, data) { console.log('this.r', this.r, {event, data}) } } class A { static room(...args) { return new B().room(...args); } static emit(...args) { return new B().emit(...args); } } A.room('aa').emit('a1', 'aaa') // r = 'aa' A.emit('a2', 'aaa') // r = undefined... y así.