代码之家  ›  专栏  ›  技术社区  ›  Kevin.a

有条件的事件发射器

  •  1
  • Kevin.a  · 技术社区  · 7 年前

    我创建了一个事件发射器类。它工作正常。我来告诉你:

    这是一节课:

    class EventEmitter{
    
        constructor() {
            this.events = {};
        }
    
        on(eventName,callback) {
            if(this.events[eventName]) {
                this.events[eventName].push(callback);
            } else {
                this.events[eventName] = [callback]; 
            }
        }
    
        trigger(eventName, ...rest) {
            if(this.events[eventName]) {
                this.events[eventName].forEach(cb => {
                    cb.apply(null,rest); 
                });
            }
        }
     }
    

    有了这门课,我可以听一些事件。像这样:

     const ee = new EventEmitter();
     ee.on('change', (aa) => {
         console.log(aa);
     });
    

     ee.trigger('change','Argument');
    

    现在我想听听有特定条件的事件。

    例如:

     ee.on({'change': 'barack the boss'}, (aa) => {
         console.log(aa);
     });
    

    以上代码位只应在触发器如下所示时执行:

     //wont run
     ee.trigger('change','barack is no boss');
    //will run
     ee.trigger('change','barack the boss');
    

    先谢谢你。

    完整代码:

    class EventEmitter{
    
        constructor() {
            this.events = {};
        }
    
        on(eventName,callback) {
            if(this.events[eventName]) {
                this.events[eventName].push(callback);
            } else {
                this.events[eventName] = [callback]; 
            }
        }
    
        trigger(eventName, ...rest) {
            if(this.events[eventName]) {
                this.events[eventName].forEach(cb => {
                    cb.apply(null,rest); 
                });
            }
        }
     }
    
    //events has been created and is currently an empty object
     const ee = new EventEmitter();
    
    //even has been created, this event has a function which will be executed when event is triggered
     ee.on({'change': 'barack the boss'}, (aa) => {
         console.log(aa);
     });
    
     //wont run
     ee.trigger('change','barack is no boss');
    //will run
     ee.trigger('change','barack the boss');
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Axel    7 年前

    我要做的就是使用 Object.Keys .on()

    与 Object.Keys 您可以通过argument对象进行迭代,就像它是一个数组一样。然后可以在触发事件时将键的值注册为条件。