code: function(self, types, fn) {
  		var type;
  		var trigger = self.trigger;
  		var event_args = {};
  	
  		// override trigger method
  		self.trigger = function() {
  			var type = arguments[0];
  			if (types.indexOf(type) !== -1) {
  				event_args[type] = arguments;
  			} else {
  				return trigger.apply(self, arguments);
  			}
  		};
  	
  		// invoke provided function
  		fn.apply(self, []);
  		self.trigger = trigger;
  	
  		// trigger queued events
  		for (type in event_args) {
  			if (event_args.hasOwnProperty(type)) {
  				trigger.apply(self, event_args[type]);
  			}
  		}
  	}
docs: Debounce all fired events types listed in `types`
  while executing the provided `fn`.
  
  @param {object} self
  @param {array} types
  @param {function} fn