Der this-Kontext in JavaScript
Der this-Kontext in JavaScript
~14 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
this gehört zu den am meisten missverstandenen Konzepten in JavaScript, weil sein Wert NICHT davon abhängt, WO eine Funktion definiert wurde, sondern WIE sie AUFGERUFEN wird. Dieses Kapitel klärt alle vier Aufruf-Regeln systematisch.
Regel 1: Methodenaufruf – this ist das Objekt vor dem Punkt
const konto = {
kontostand: 1500,
zeigeKontostand() {
console.log(this.kontostand); // 'this' ist 'konto', weil konto.zeigeKontostand() aufgerufen wird
},
};
konto.zeigeKontostand(); // 1500Regel 2: einfacher Funktionsaufruf – this ist undefined (im Strict Mode)
function zeigeThis() {
console.log(this); // undefined - ES Modules laufen automatisch im Strict Mode
}
zeigeThis();Die berüchtigte Falle: Wird eine Methode aus ihrem Objekt HERAUSGELÖST und separat aufgerufen, gilt NICHT mehr Regel 1, sondern Regel 2:
const konto = {
kontostand: 1500,
zeigeKontostand() {
console.log(this.kontostand);
},
};
const loseFunktion = konto.zeigeKontostand; // die Funktion wird 'herausgelöst'
loseFunktion(); // TypeError: Cannot read properties of undefined - 'this' ist NICHT mehr 'konto'!Achtung: Das passiert in der Praxis oft UNBEABSICHTIGT – etwa wenn eine Objekt-Methode als Callback übergeben wird: setTimeout(konto.zeigeKontostand, 1000) hat GENAU dasselbe Problem, da setTimeout die Funktion intern separat aufruft.
Regel 3: explizite Bindung mit call, apply und bind
function zeigeKontostand() {
console.log(this.kontostand);
}
const konto = { kontostand: 1500 };
zeigeKontostand.call(konto); // 1500 - 'this' wird explizit auf 'konto' gesetzt, Argumente einzeln
zeigeKontostand.apply(konto); // 1500 - identisch zu call, Argumente als Array
const gebundeneFunktion = zeigeKontostand.bind(konto); // 'this' PERMANENT gebunden
gebundeneFunktion(); // 1500 - funktioniert auch losgelöst, da 'this' fest gebunden istbind() ist die Lösung für das Callback-Problem aus Regel 2 – setTimeout(konto.zeigeKontostand.bind(konto), 1000) funktioniert korrekt, weil die zurückgegebene Funktion this unveränderlich in sich trägt.
Regel 4: Konstruktor-Aufruf mit new
Wird eine Funktion mit new aufgerufen, erzeugt JavaScript ein NEUES, leeres Objekt und setzt this darauf – Details dazu folgen in Kapitel 19, sobald wir class kennenlernen (das intern auf demselben Mechanismus basiert).
Arrow Functions: die elegantere moderne Lösung
Wie in Kapitel 9 gezeigt, haben Arrow Functions KEIN eigenes this – sie erben es lexikalisch vom umgebenden Scope. Damit lässt sich das Callback-Problem oft ELEGANTER als mit bind() lösen:
const konto = {
kontostand: 1500,
transaktionen: [100, -50, 200],
zeigeAlleTransaktionen() {
// Arrow Function als Callback: erbt 'this' von zeigeAlleTransaktionen(), also 'konto'
this.transaktionen.forEach(betrag => {
console.log(`${this.kontostand > 0 ? '✓' : '✗'} Buchung: ${betrag}`);
});
},
};
konto.zeigeAlleTransaktionen(); // 'this' bleibt in JEDEM Callback-Durchlauf korrekt 'konto'Achtung: Wäre die forEach-Callback-Funktion oben eine NORMALE Funktion (function (betrag) { ... }) statt einer Arrow Function, würde this.kontostand darin undefined ergeben (Regel 2 greift, da forEach die Callback-Funktion separat aufruft) – dies ist einer der häufigsten praktischen Gründe für die Arrow-Function-Empfehlung aus Kapitel 9.