【问题标题】:javascript static class detect which method call previousjavascript静态类检测之前调用哪个方法
【发布时间】:2021-10-29 07:07:58
【问题描述】:

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

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

这是一个类A

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

感谢您的宝贵时间!

【问题讨论】:

    标签: javascript static-methods


    【解决方案1】:

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

    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。返回具有自己作用域的实例(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.将逻辑委托给非静态类(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
    

    ...等等。

    【讨论】:

    • 非常感谢您的帮助。这是一个充满挑战的时期,但你让它变得更容易了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多