constructor(listener, interval, handler) {
    super();
    /**
     * Function to callback
     * @type {function(this: T, ...?)}
     * @private
     */
    this.listener_ = handler != null ? listener.bind(handler) : listener;

    /**
     * Interval for the throttle time
     * @type {number}
     * @private
     */
    this.interval_ = interval;

    /**
     * The last arguments passed into `fire`, or null if there is no pending
     * call.
     * @private {?IArrayLike}
     */
    this.args_ = null;

    /**
     * Indicates that the action is pending and needs to be fired.
     * @type {boolean}
     * @private
     */
    this.shouldFire_ = false;

    /**
     * Indicates the count of nested pauses currently in effect on the throttle.
     * When this count is not zero, fired actions will be postponed until the
     * throttle is resumed enough times to drop the pause count to zero.
     * @type {number}
     * @private
     */
    this.pauseCount_ = 0;

    /**
     * Timer for scheduling the next callback
     * @type {?number}
     * @private
     */
    this.timer_ = null;
  }
@param {function(this: T, ...?)} listener Function to callback when the
    action is triggered.
@param {number} interval Interval over which to throttle. The listener can
    only be called once per interval.
@param {T=} handler Object in whose scope to call the listener.