2025
this in JS

this in JavaScript

Datum: Mai 2025
Lesedauer: 2 Minuten


Prägnante Übersicht zum this Keyword in JS.

Was ist this?

this referenziert einen Wert. In der Regel ist dies der sogenannte "execution context".
Im Browser ist dies die window Instance (aus Window), welche das document enthält.
In Node.js ist es global.
In einer Funktion ist es eine Referenz zum Objekt, auf welchem Aufruf getätigt wurde.

Funktionen

Im globalen Kontext eines Browsers verweist this standardmässig auf das window Objekt.

function logThisContext() {
    console.log(this); // window
}
 
logThisContext();

In einem Objekt bezieht sich this auf das aktuelle Objekt, was in diesem Fall den Zugriff auf die ppg ermöglicht.

const player = {
    ppg: 23,
    getPpg() {
        console.log(this.ppg); // 23
    },
};
 
player.getPpg();

Nach Erstellung eines Objekts mit der new Syntax, referenziert this die neue Instanz.

function Player(name) {
    this.name = name;
 
    this.getName = function () {
        console.log(this.name);
    };
}
 
const magic = new Player('Magic Johnson');
magic.getName();

Arrow Functions

In Arrow Functions basiert das this auf dem Ausführungskontext der umschliessenden Funktion oder des umgebenden Objekts.

const player = {
    ppg: 23,
    reb: 8,
    getPpg() {
        console.log(this.ppg); // this->player; ppg->23
    },
    getReb: () => console.log(this.reb), // this->window; this.reb->undefined
};
 
player.getPpg();
player.getReb();

Prototype Methods

bind() kreiert eine neue Funktion, welche this an ein spezifisches Objekt bindet.

function getPpg() {
    console.log(this); // {ppg: 23}
    console.log(this.ppg); // 23
}
 
const player = {
    ppg: 23,
};
 
const playerPpg = getPpg.bind(player);
playerPpg();

call() funktioniert ähnlich, ruft jedoch die Funktion direkt auf. Dabei können zusätzliche Argumente einzeln übergeben werden.

function getPpg() {
    console.log(this); // {ppg: 23}
    console.log(this.ppg); // 23
}
 
const player = {
    ppg: 23,
};
 
getPpg.call(player);

apply() funktioniert wie call(), aber anstelle von einzelnen Argumenten wird ein Array übergeben.

function getPointsPerMin(freethrows, playedMins) {
    console.log((this.ppg + freethrows) / playedMins); // 1
}
 
const player = {
    ppg: 23,
};
 
getPointsPerMin.call(player, [4, 27]);

Method Chaining

Method Chaining ist das Aufrufen mehrere Methoden hintereinander auf einem Objekt. Daraus resultiert ein kompakter, gut lesbarer Code. Eine solche Abrufkette kann man z.B. für einen Fetch verwenden.

fetch('https://example.com/datapoint')
    .then((response) => response.json())
    .then((data) => console.log(data))
    .catch((error) => console.error('Error:', error));

Der Schlüssel zur Implementierung ist auf Zeile 6 sichtbar. Da wird das aktuelle Objekt mit this zurückgegeben, wodurch der nächste Methodenaufruf direkt anschliessend erfolgen kann.

function Player(name) {
    this.name = name;
 
    this.dribble = function () {
        console.log('- Dribble -');
        return this;
    };
}
 
const ai = new Player('Allen Iverson');
ai.dribble().dribble().dribble(); // - Dribble - - Dribble - - Dribble -

Strict Mode

Strict Mode (ab ECMAScript 5) zwingt JavaScript zu strengeren Regeln.
Ist dieser Modus aktiv, referenziert this nicht implizit den execution context.

'use strict';
 
console.log(this); // undefined

Zugriffe auf window oder global müssen also explizit erfolgen.