匿名事件 – 超低耦合

在我所见过的 Custom Event 例子中,总是会先有一个事件类型,然后会有订阅者订阅其感兴趣的不同事件,最后通过事件管理器发布事件。在这种事件模型里,必须首先存在一个事件类型。但是在有的情况下,我们想要订阅者能够订阅一个还不存在的事件类型。这个暂时还不存在的事件我们可以叫他匿名事件.

下面来看一段实现匿名事件的代码:

//事件管理器
eventManager.events = {};
//@sEvent: 事件类型,@sMethod:当事件发生时,要调用的订阅者的一个方法
eventManager.subscribe = function(sEvent, oSubscriber, sMethod) {
  //如果该事件还不存在就创建一个这种类型事件的数组
  if (!eventManager.events[sEvent]) {
    eventManager.events[sEvent] = [];
  }
  eventManager.events[sEvent].push({subscriber: oSubscriber, method: sMethod});
};

eventManager.unsubscribe = function(sEvent, oSubscriber) {
  if (!eventManager.events[sEvent]) {
    return;
  }
  for (var i=eventManager.events[sEvent].length-1; i>=0; i--) {
    if (eventManager.events[sEvent][i].subscriber===oSubscriber) {
      eventManager.events[sEvent].splice(i,1);
    }
  }
};

eventManager.fire = function(sEvent) {
  if (!eventManager.events[sEvent]) {
    return;
  }
  for (var i=0; i<eventManager.events[sEvent].length; i++) {
    subscription = eventManager.events[sEvent][i];
    subscription.subscriber[subscription.method].apply(subscription.subscriber, arguments);
  }
};

你可能感兴趣的:(JavaScript,EventBus,observer,event)