W3docs

JavaScript-Objektmethoden und this

JavaScript-Objektmethoden und das this-Schlüsselwort: Methoden definieren, this zur Laufzeit auflösen, Methoden ausleihen mit call/apply/bind, Method Chaining und Pfeilfunktionen vs. reguläre Funktionen.

Einführung in Objektmethoden in JavaScript

JavaScript-Objekte sind Sammlungen von Eigenschaften, und Methoden von Objekten sind Funktionen, die als Eigenschaften dieser Objekte gespeichert sind. Methoden ermöglichen es einem object, mit seinen eigenen Daten zu agieren, anstatt sie nur zu speichern.

Dieser Leitfaden behandelt, wie man Methoden definiert und aufruft, wie das this-Schlüsselwort eine Methode mit ihrem object verbindet, wie man den Objektzustand von innen liest und verändert, sowie die häufigste Fehlerquelle in der Sprache: den Verlust von this in Callbacks. Abschließend wird der praktische Unterschied zwischen regulären Funktionen und Pfeilfunktionen erläutert.

Methoden definieren und aufrufen

Eine Methode ist lediglich eine Eigenschaft, deren Wert eine Funktion ist. Die Kurzschreibweise greet() { ... } ist die moderne Art, eine Methode zu schreiben; sie entspricht greet: function() { ... }.

javascript— editable

greet ist eine Methode des user-Objekts. Sie verwendet this.name, um auf die name-Eigenschaft des Objekts zuzugreifen, und zeigt damit, wie Methoden mit den Daten ihres eigenen Objekts arbeiten können. Eine Methode wird mit der gleichen Punktnotation aufgerufen, die man für jede Eigenschaft verwendet, gefolgt von (): user.greet().

Das this-Schlüsselwort in Methoden

Das this-Schlüsselwort verweist auf das Objekt vor dem Punkt zum Zeitpunkt des Methodenaufrufs. Es wird zum Aufrufzeitpunkt bestimmt, nicht wenn die Funktion geschrieben wird — das macht this flexibel, aber auch fehleranfällig.

Beispiel: Verwendung von this in Methoden

javascript— editable

In der details-Methode wird this verwendet, um auf das person-object selbst zu verweisen, wodurch auf die Eigenschaften name und age zugegriffen werden kann, um eine personalisierte Nachricht zu erzeugen. Da details als person.details() aufgerufen wurde, ist this gleich person.

Objekteigenschaften verändern

Methoden dienen nicht nur zum Abrufen von Eigenschaftswerten, sondern auch zum Aktualisieren dieser.

Beispiel: Eigenschaften aktualisieren

javascript— editable

Die promote-Methode aktualisiert die jobTitle-Eigenschaft und gibt eine Meldung aus, die die Änderung widerspiegelt. Dies verdeutlicht, wie Methoden den internen Zustand eines Objekts dynamisch verändern können.

Methoden für Berechnungen verwenden

Methoden sind auch nützlich für Berechnungen, die auf Objekteigenschaften basieren.

Beispiel: Werte berechnen

javascript— editable

Die area-Methode berechnet die Fläche des Rechtecks anhand der Eigenschaften width und height. Dieses Beispiel zeigt, wie Methoden Funktionalität kapseln können, die mit den im object gespeicherten Daten arbeitet.

Methoden ausleihen

Da this zum Aufrufzeitpunkt aufgelöst wird, kann dieselbe Funktion für verschiedene Objekte ausgeführt werden. Dies ist die Grundlage des Methoden-Ausleihens.

Beispiel: Eine Methode ausleihen

javascript— editable

Hier wird die speak-Methode des dog-Objekts dem cat-object zugewiesen. Wenn sie als cat.speak() aufgerufen wird, verweist this.name auf Whiskers, was zeigt, dass this davon abhängt, wie die Methode aufgerufen wird, nicht wo sie definiert wurde.

Wenn man die Methode nicht neu zuweisen kann, aber dennoch ausleihen möchte, kann man call, apply oder bind verwenden, um this explizit zu setzen. Siehe Dekoratoren und Weiterleitung, call/apply für die ausführliche Behandlung.

javascript— editable

introduce.call(alice) führt introduce mit this gesetzt auf alice aus, obwohl introduce eine eigenständige Funktion und keine Eigenschaft eines der beiden Objekte ist.

Method Chaining

Method Chaining ermöglicht es, mehrere Methoden in einem einzigen Ausdruck aufzurufen, indem jede Methode return this zurückgibt — das object selbst. Das zurückgegebene object wird zum Ziel des nächsten Aufrufs.

Beispiel: Method Chaining implementieren

javascript— editable

Jede Methode in calculator verändert value und gibt das object zurück, was die verketteten Aufrufe ermöglicht. Dieses Muster verbessert die Lesbarkeit und ist die Grundlage von Fluent APIs wie jQuery und vielen array-Hilfsfunktionen.

Traditionelle Funktionen vs. Pfeilfunktionen

In JavaScript verhält sich das this-Schlüsselwort bei traditionellen Funktionen und Pfeilfunktionen deutlich unterschiedlich. Diesen Unterschied zu verstehen ist das Wichtigste, um fehlerfreien this-abhängigen Code zu schreiben.

Warnung

Achte immer darauf, dass this seinen Kontext in Callbacks oder beim Übergeben einer Methode als Argument verlieren kann. In solchen Fällen verweist this möglicherweise nicht mehr auf das ursprüngliche object — es kann undefined sein (im Strict-Modus / in Modulen) oder das globale object.

Traditionelle Funktionen

Bei einer traditionellen Funktion wird this durch die Art und Weise, wie die Funktion aufgerufen wird, bestimmt. So variiert es:

  • Globaler Kontext: Wenn eine Funktion ohne object vor dem Punkt aufgerufen wird, ist this das globale object (window in Browsern, global in Node) in nicht-strengem Code, und undefined im Strict-Modus oder in Modulen.
javascript— editable
  • Objektmethoden: Wenn eine Funktion als Methode eines Objekts aufgerufen wird, verweist this auf dieses object.
javascript— editable
  • Event-Handler: Wenn eine traditionelle Funktion als Event-Handler verwendet wird, verweist this auf das Element, das das Ereignis empfangen hat.
<button id="myButton">Click me</button>
<p id="output">Click the button to see the result.</p>

<script>
  document.getElementById("myButton").addEventListener("click", function () {
    document.getElementById("output").innerHTML = "This button was clicked: " + this;
  });
</script>

Pfeilfunktionen

Pfeilfunktionen haben kein eigenes this. Stattdessen übernehmen sie this aus dem umgebenden lexikalischen Gültigkeitsbereich zum Zeitpunkt ihrer Definition. Das macht sie ideal für Callbacks innerhalb einer Methode, wenn man das this der Methode beibehalten möchte.

  • Konsistenter Kontext in Callbacks: Nützlich, wenn this innerhalb eines in einer Methode verschachtelten Callbacks gleich bleiben muss.
javascript— editable

Hier verwendet logActions eine Pfeilfunktion innerhalb von forEach. Die Pfeilfunktion erbt this von logActions und verweist daher korrekt auf userProfile.name. Eine traditionelle Funktion, die an forEach übergeben wird, erhielte ihr eigenes this (das globale object oder undefined), sodass this.name fehlschlagen würde.

Info

Verwende keine Pfeilfunktion, um eine Methode auf oberster Ebene eines Objekts zu definieren, wenn du auf this angewiesen bist. Eine Pfeilfunktion hat kein eigenes this und erbt es daher aus dem umgebenden Gültigkeitsbereich (oft dem globalen) statt aus dem object — this.name wäre dann undefined.

Praktisches Beispiel

Betrachten wir ein realistisches Beispiel mit einem object, das das Online-Profil eines Benutzers verwaltet, und demonstrieren beide Funktionstypen nebeneinander:

javascript— editable

Dieses Beispiel zeigt deutlich, wie Pfeilfunktionen dabei helfen, den richtigen Kontext (this) beizubehalten, insbesondere in verschachtelten Callbacks, wo das dynamische this einer traditionellen Funktion stillschweigend zu Fehlern führen würde.

this verlieren und wie man es behebt

Der klassische Fehler: Man extrahiert eine Methode in eine Variable oder übergibt sie als Callback, und this ist nicht mehr das object.

javascript— editable

Wenn counter.show abgetrennt wird, hat der Aufruf show() kein object vor dem Punkt, sodass this verloren geht. bind gibt eine neue Funktion zurück, deren this dauerhaft festgelegt ist. Dasselbe gilt für setTimeout(obj.method, 1000) (fehlerhaft) versus setTimeout(() => obj.method(), 1000) (funktioniert). Für eine tiefergehende Betrachtung siehe Funktionsbindung.

Fazit

Objektmethoden verleihen deinen Daten Verhalten, und das this-Schlüsselwort verbindet eine Methode mit ihrem object. Die wichtigste Regel: this ist das object vor dem Punkt zum Aufrufzeitpunkt und kann sich je nach Aufrufart der Funktion ändern. Reguläre Funktionen erhalten ein dynamisches this; Pfeilfunktionen erfassen this lexikalisch — genau das, was man für Callbacks möchte, aber falsch für Methoden auf oberster Ebene ist. Wenn this verloren geht, greife auf bind, call oder apply zurück.

Für weiterführende Themen erkunde Objektreferenzen und Kopieverhalten, Konstruktorfunktionen und new sowie Dekoratoren mit call/apply.

Übungen

Übung
Worauf verweist das 'this'-Schlüsselwort in JavaScript?
Worauf verweist das 'this'-Schlüsselwort in JavaScript?
Übung
Warum sollte man Pfeilfunktionen für Methoden auf oberster Ebene eines Objekts vermeiden, die this verwenden?
Warum sollte man Pfeilfunktionen für Methoden auf oberster Ebene eines Objekts vermeiden, die this verwenden?
Was this page helpful?