javascript static class 检测哪个方法调用了前一个

javascript static class detect which method call previous

你能帮帮我吗! 在 emit 方法中如何检查他们是否调用了 room 方法。
以下两种情况:

// case 1: A.room('aa').emit('a1', 'aaa')
// case 2: A.emit('a2', 'aaa')

这是一个classA

class A {
  static room(r) {
    this.r = r
    return this
  }
  static emit(event, data) {
    //todo
    console.log('this.r', this.r, {event, data})
  }
}

感谢您的宝贵时间!

你需要为每个调用单独存储像 r 这样的流值,这对于静态 classes 来说是不合理的目标,因为你一次又一次地使用相同的 class,而不是独立的瞬间。可能的解决方案:

1.不再 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。 Return 个具有自己范围的实例(A 保持静态):

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。将逻辑委托给非静态 class(A 保持静态):

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

...等等。