Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将事件附加和删除到事件发射器_Javascript - Fatal编程技术网

Javascript 将事件附加和删除到事件发射器

Javascript 将事件附加和删除到事件发射器,javascript,Javascript,我正在编写自己的事件发射器。我以前写过一些,但我想写一个类似Node和其他系统的on和off样式。我一直在试图理解如何使用off删除事件发射器的侦听器。这是因为当调用on时,我不知道如何向该侦听器提供或生成唯一的id 事件系统 class EventSystem { constructor(sender){ this.sender = sender; this.events = {}; return this; } cre

我正在编写自己的事件发射器。我以前写过一些,但我想写一个类似Node和其他系统的
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");