有条件的事件发射器

时间:2019-03-22 08:18:43

标签: javascript object events

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

这是课程:

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 个答案:

答案 0 :(得分:1)

我要做的是在.on()事件寄存器上使用Object.Keys。这将允许您遍历传递的对象(同时使您能够在单个调用中注册多个事件)。

使用Object.Keys可以遍历参数对象,就好像它是一个数组一样。然后,您可以在触发事件时将键的值注册为条件。