code: function addConditionalEventListener(emitter, type, listener) {
  
          function conditionalListener() {
              var done = listener.apply(emitter, arguments);
              if (done === true) {
                  removeEventListener(emitter, type, conditionalListener);
              }
          }
  
          // TODO Check beyond just one level of listener references
          conditionalListener.listener = listener.listener || listener;
  
          addEventListener(emitter, type, conditionalListener, NaN);
      }
docs: Many of these functions are broken out from the prototype for the sake of optimization. The functions on the protoytype take a variable number of arguments and can be deoptimized as a result. These functions have a fixed number of arguments and therefore do not get deoptimized. 
  @function Emitter~addConditionalEventListener
  @param {Emitter} emitter The emitter on which the event would be emitted.
  @param {EventType} type The event type.
  @param {EventListener} listener The event callback.