我用javascript写了一个观察者。您可以像这样触发事件:
ClassThatExtendsEvent.triggerEvent('EventName', arg1, arg2, ..., argn)
有可变数量的参数,第一个参数是事件名称。我也有订阅者,它们保存在我的事件类的私有属性中。他们被这样称呼:
Event.prototype.triggerEvent = function() {
var callbacks = this._events[eventName];
if(callbacks !== undefined) {
for (var i = 0, l = callbacks.length; i < l; i++) {
// I do not need the first argument here!!!
callbacks[i].apply(callbacks[i], arguments);
}
}
}
但是,订阅者确实知道事件名称,因此可以省略。但我不知道如何从列表中删除一个参数(因为它不是数组,但似乎是某种对象)。
我还需要读取事件名称,一旦它被删除,因为在通知直接订阅者之后,全局事件系统就会启动。这个全局事件系统需要名称。
因此整个函数看起来像这样:
Event.prototype.triggerEvent = function() {
// First we deliver to direct subscribers
var callbacks = this._events[eventName];
if(callbacks !== undefined) {
for (var i = 0, l = callbacks.length; i < l; i++) {
// I do NOT need the first argument here!!!
callbacks[i].apply(callbacks[i], arguments);
}
}
// Now we broadcast the event to the entire system
// I DO need the first argument here!!!
Facade.getInstance().broadcastEvent.apply(Facade.getInstance(), arguments);
}
你将如何实现这一点?