       @off evt, wrappedListener
       listener.apply @, rest
     @on evt, wrappedListener
-
-  when:-> # TODO: implement
 
   off:(evt, listener)->
     init this

        # writable      : yes
      )

  constructor:(obj)->
    if obj?
      mixin obj
    else
      obj = this

  on:(evt, listener)->
    throw new Error 'Listener is required!'  unless listener?

    ###
    delete @listeners[listenerId]
    delete @targets[listenerId]
    return this
  
  defineProperty = Object.defineProperty ||
    (obj, prop, {value})-> obj[prop] = value
