code: function (eventName) {
          var event = { type: eventName, target: this },
              handlerList = this._eventHandlers && this._eventHandlers[eventName],
              i;
  
          if (!handlerList) {
              return;
          }
  
          // Use a clone of the list in case handlers call on()/off() while we're still in the loop
          handlerList = handlerList.slice();
  
          // Pass 'event' object followed by any additional args trigger() was given
          var applyArgs = Array.prototype.slice.call(arguments, 1);
          applyArgs.unshift(event);
  
          for (i = 0; i < handlerList.length; i++) {
              try {
                  // Call one handler
                  handlerList[i].handler.apply(null, applyArgs);
              } catch (err) {
                  console.error("Exception in '" + eventName + "' listener on", this, String(err), err.stack);
                  console.assert();  // causes dev tools to pause, just like an uncaught exception
              }
          }
      }
docs: Invokes all handlers for the given event (in the order they were added).
  @param {string} eventName
  @param {*} ... Any additional args are passed to the event handler after the event object