on(name, callback, context) {
    if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this
    this._events || (this._events = {})
    const events = this._events[name] || (this._events[name] = [])
    events.push({ callback: callback, context: context, ctx: context || this })
    return this
  }
listen to an event indefinitely, if you want to stop you need to call `off`
@method on
@param {String} name
@param {Function} callback
@param {Object} context