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();