Javascript 将事件附加和删除到事件发射器
我正在编写自己的事件发射器。我以前写过一些,但我想写一个类似Node和其他系统的Javascript 将事件附加和删除到事件发射器,javascript,Javascript,我正在编写自己的事件发射器。我以前写过一些,但我想写一个类似Node和其他系统的on和off样式。我一直在试图理解如何使用off删除事件发射器的侦听器。这是因为当调用on时,我不知道如何向该侦听器提供或生成唯一的id 事件系统 class EventSystem { constructor(sender){ this.sender = sender; this.events = {}; return this; } cre
on
和off
样式。我一直在试图理解如何使用off
删除事件发射器的侦听器。这是因为当调用on
时,我不知道如何向该侦听器提供或生成唯一的id
事件系统
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);
}
}
}
}
在使用
.on
时,如何分配某种ID,以便使用.off
?您是否正在尝试实现Jquery中的命名空间功能?如下
$("#element").on("click.myNamespace", function() {
console.log("doSomething");
});
$("#element").off("click.myNamespace");
你为什么需要身份证?使用
indexOf()?如果两个人正在侦听具有相同匿名函数回调的事件,该怎么办?不是完全相同的函数,而是逐字编写的。这就是为什么必须将名称和函数本身传递给off()
在池中找到名称下的函数并将其删除。如果需要多个处理程序,那么不要删除它,或者根据需要添加多个处理程序(它们很便宜),假设两个类使用它们自己的、但在其他方面相同的anon函数侦听create
<代码>foo.on('create',函数(a,b,c){console.log(a)};
它会知道区别吗?是的,它会神奇地知道区别,因为调用off()的代码记得(或者无论如何都应该记得)添加的相应函数。不,我没有尝试这样做。我不想让我的所有类都使用jquery。你知道吗..你说得对。这就是我正在尝试做的。如果我调用.off('eventName')
所有人都将被取消订阅。但是如果我传递一个名称空间,它可以像ID一样使用!
$("#element").on("click.myNamespace", function() {
console.log("doSomething");
});
$("#element").off("click.myNamespace");