Andree Filchos: [oop] this bei Funktionsaufruf durch Eventhandler

Beitrag lesen

Hallo,

ich habe eine eigene Klasse test mit einer Eigenschaft foo und einer Funktion showFoo. Letztere soll durch ein Event getriggert werden und zeigt hier lediglich ein paar Werte an.
In dem folgenden Beispielcode (hier stark verkürzt) wird eine Instanz myTest erzeugt. Die Funktion showFoo dieser Instanz kann auf zwei Weisen aufgerufen werden:

Achtung: Dieser Beispielcode läuft nur unter Mozilla.

  1. Ich klicke den Link. Richtigerweise zeigt die Funktion e als undefiniert an und gibt mir in this.foo den Wert "bar" zurück.

  2. Ich mache einen Rechtsclick. Der Eventhandler ruft die Funktion auf und zeigt e richtig als [Object Event] an. In this allerdings finde ich nicht die erwartete Instanz, sondern ein [Object HTMLDocument], dessen nodeName #document ist. this.foo ist daraus folgend undefiniert.

Frage 1: Woher kommt diese Referenz in this auf ein HTMLDocument-Object? Bug oder Feature?
Frage 2: Wenn dieser Weg nicht gangbar ist, wie kann ich auf die Instanz und damit zum Beispiel auf die Eigenschaft foo zurückgreifen?

Ich freue mich über alle kompetenten Antworten
Gruß Andree

-----
Der Beispielcode:

<html>
  <head>
    <script>

function test() {
        this.foo = "bar";
        this.showFoo = function (e) {
          alert("Event:" + e + "\nthis:" + this + "\nFoo: " + this.foo);
        }
      }

</script>
  </head>
  <body>
    <a href="#" onclick="myTest.showFoo();">Show Foo</a>

<script>
      myTest = new test();
      document.oncontextmenu = myTest.showFoo;
    </script>
  </body>
</html>