   # * `commandName` {String} indicating the name of the command to dispatch.
   dispatch: (target, commandName, detail) ->
     event = new CustomEvent(commandName, {bubbles: true, detail})
-    eventWithTarget = Object.create {},
-      target: value: target
-      preventDefault: value: ->
-      stopPropagation: value: ->
-      stopImmediatePropagation: value: ->
-    # NOTE: In Chrome 43, Object.create doesn't work well with CustomEvent;
-    # However utilizing _.defaults here doesn't really do anything since all properties have been
-    # moved from "own" to the prototype, so we should update this to fully shadowing the properties
-    # from Event.prototype (+ detail property from CustomEvent).
-    eventWithTarget = _.defaults(eventWithTarget, event)
-    @handleCommandEvent(eventWithTarget)
+    Object.defineProperty(event, 'target', value: target)
+    @handleCommandEvent(event)
 
   # Public: Invoke the given callback before dispatching a command event.
   #

      @selectorBasedListenersByCommandName[commandName] = listeners.slice()
    return

  handleCommandEvent: (originalEvent) =>
    propagationStopped = false
    immediatePropagationStopped = false
    matched = false
    currentTarget = originalEvent.target

    syntheticEvent = Object.create {},
      eventPhase: value: Event.BUBBLING_PHASE
      currentTarget: get: -> currentTarget
      target: value: currentTarget
      preventDefault: value: ->
        originalEvent.preventDefault()
      stopPropagation: value: ->
        originalEvent.stopPropagation()
        propagationStopped = true
      stopImmediatePropagation: value: ->
        originalEvent.stopImmediatePropagation()
        propagationStopped = true
        immediatePropagationStopped = true
      abortKeyBinding: value: ->
        originalEvent.abortKeyBinding?()
    # NOTE: See similar scenario in ::dispatch.
    syntheticEvent = _.defaults(syntheticEvent, originalEvent)

    @emitter.emit 'will-dispatch', syntheticEvent

    loop
      listeners = @inlineListenersByCommandName[originalEvent.type]?.get(currentTarget) ? []
      if currentTarget.webkitMatchesSelector?
        selectorBasedListeners =
          (@selectorBasedListenersByCommandName[originalEvent.type] ? [])
            .filter (listener) -> currentTarget.webkitMatchesSelector(listener.selector)
            .sort (a, b) -> a.compare(b)
        listeners = listeners.concat(selectorBasedListeners)


      for listener in listeners
        break if immediatePropagationStopped
        listener.callback.call(currentTarget, dispatchedEvent)

      break if currentTarget is window
      break if propagationStopped
