constructor(options = {}, keyEventManager) {
    /**
     * @typedef {number} ComponentId Unique index associated with every HotKeys component
     * as it becomes active.
     *
     * For focus-only components, this happens when the component is focused. The HotKeys
     * component closest to the DOM element in focus gets the smallest number (0) and
     * those further up the render tree get larger (incrementing) numbers. When a different
     * element is focused (triggering the creation of a new focus tree) all component indexes
     * are reset (de-allocated) and re-assigned to the new tree of HotKeys components that
     * are now in focus.
     *
     * For global components, component indexes are assigned when a HotKeys component is
     * mounted, and de-allocated when it unmounts. The component index counter is never reset
     * back to 0 and just keeps incrementing as new components are mounted.
     */

    /**
     * Should be overridden by children to set a Logger instance
     */
    this.logger = null;

    /**
     * Counter to maintain what the next component index should be
     * @type {ComponentId}
     */
    this.componentId = -1;

    /**
     * Reference to key event manager, so that information may pass between the
     * global strategy and the focus-only strategy
     * @type {KeyEventManager}
     */
    this.keyEventManager = keyEventManager;

    this.componentTree = new ComponentTree();

    /**
     * Expected to be overridden by child class
     * @type {AbstractKeyEventSimulator}
     * @abstract
     */
    this._simulator = null;

    this._reset();

    this.resetKeyHistory();
  }
Creates a new instance of an event strategy (this class is an abstract one and
not intended to be instantiated directly).
@param {Object} options Options for how event strategy should behave
@param {string} options.logLevel The level of severity to log at
@param {KeyEventManager} keyEventManager KeyEventManager used for passing
       messages between key event strategies