Reputation: 301
I am writing my own event emitter. I have written a few before but I want to write one that is in the style of on
and off
like Node and other systems. I am stuck in trying to understand how I could use off
to remove a listener to an event emitter. This is because when on
is called, I don't see how I can provide or generate a unique id
to this listener.
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);
}
}
}
}
Some Class
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');
How can I assign some kind of ID when using .on
so that I can use .off
?
Upvotes: 2
Views: 386
Reputation: 84
Are you trying to implement namespace feature like in Jquery? Like below
$("#element").on("click.myNamespace", function() {
console.log("doSomething");
});
$("#element").off("click.myNamespace");
Upvotes: 2