Javascript 创建特定循环行为

Javascript 创建特定循环行为,javascript,event-handling,iteration,eventemitter,Javascript,Event Handling,Iteration,Eventemitter,在为我的项目创建内部EventEmitter时,我开始好奇如何为附加的事件处理程序生成特定的循环迭代行为。以下是我关心的一个例子: MyEventEmitter.prototype.emit = function (name, event) { var index; if (name in this.events) { for (index = 0; index < this.events[name].length; index++) {

在为我的项目创建内部
EventEmitter
时,我开始好奇如何为附加的事件处理程序生成特定的循环迭代行为。以下是我关心的一个例子:

MyEventEmitter.prototype.emit = function (name, event) {
    var index;

    if (name in this.events) {
        for (index = 0; index < this.events[name].length; index++) {
            this.events[name][index].call(this, event);
        }
    }
};
这将记录以下内容:

1
2
3
5

请注意,
4
不会被迭代,因为
3
会删除自身。我将如何编写
emit
来适应这一点?或者,如果适当,本地实现
EventEmitter
s如何处理这一点?

在查看节点源之后,我发现:


基本上,它会创建一个侦听器数组的副本进行迭代,这样,如果侦听器从原始数组中删除自己,副本的索引将不受影响。

@jooko谢谢,忘记添加该标记了
1
2
3
5
listeners = handler.slice();