将事件附加到事件发射器并将其删除

时间:2016-05-21 15:31:43

标签: javascript

我正在编写自己的事件发射器。我之前写了一些,但我想写一个像onoff样式的节点和其他系统。我一直试图理解如何使用off删除事件发射器的监听器。这是因为在调用on时,我不知道如何为此侦听器提供或生成唯一的id

的EventSystem

class EventSystem {
    constructor(sender){
        this.sender = sender;
        this.events = {};
        return this;
    }

    create(name){
        return this.events[name] = { callbacks : [] };
    }

    on(name, callback){
        var event = this.events[name];
        if(!isDefined(event))
            event = this.create(name);

        event.callbacks.push(callback);
    }

    off(name){

    }

    emit(){
        var event = this.events[arguments[0]];
        if(isDefined(event)){
            var args = arguments.slice(1, arguments.length);
            for(var i = 0; i < event.callbacks.length; i++){
                event.callbacks[i](this.sender, args);
            }
        }
    }
}

某些课程

class Foo {
   constructor(){
     this.evs = new EventSystem(this);
     return this;
  }
  do(){
     this.evs.emit('do', arg1, arg2, arg3);
   }
}

var foo = new Foo();

foo.on('do', function(sender, arg1, arg2){
    console.log(arg1);
});

foo.do();

foo.off('do');

如何在使用.on时指定某种ID,以便我可以使用.off

1 个答案:

答案 0 :(得分:2)

您是否尝试在Jquery中实现名称空间功能?如下所示

    $("#element").on("click.myNamespace", function() { 
      console.log("doSomething");
    });

    $("#element").off("click.myNamespace");