           callback false # false -> isSuccess.
 
 class HoverMode extends Mode
-  constructor: (@link) ->
+  constructor: (link) ->
+    super name: "hover-mode", singleton: "hover-mode", exitOnEscape: true
+    @link = link
     DomUtils.simulateHover @link
-    super name: "hover-mode", singleton: "hover-mode", exitOnEscape: true
     @onExit => DomUtils.simulateUnhover @link
 
 root = exports ? (window.root ?= {})

      # Since we might renumber the hints, we should reset the current hintKeyStrokeQueue.
      @hintKeystrokeQueue = []
      @linkTextKeystrokeQueue.push keyChar.toLowerCase()

  popKeyChar: ->
    @hintKeystrokeQueue.pop() or @linkTextKeystrokeQueue.pop()

    # false positive for which a close descendant is already clickable.  False positives tend to be close
    # together in the DOM, so - to keep the cost down - we only search nearby elements.  NOTE(smblott): The
    # visible elements have already been reversed, so we're visiting descendants before their ancestors.
    descendantsToCheck = [1, 2, 3] # This determines how many descendants we're willing to consider.
    visibleElements =
      for element, position in visibleElements
        # TODO(philc): Pull this function out into a helper function, and/or use Array.some()
        continue if element.possibleFalsePositive and do ->
          index = Math.max 0, position - 6 # This determines how far back we're willing to look.
          while index < position
