2025
this in JS

this in JavaScript

Date: May 2025
Reading time: 2 minutes


Concise overview of the this keyword in JS.

What is this?

this references a value. Generally, this is the "execution context".
In the browser, this is the window instance (from Window), which contains the document.
In Node.js it is global.
In a function, it is a reference to the object on which the call was made.

Functions

In the global context of a browser, this refers to the window object by default.

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

In an object, this refers to the current object, which in this case enables access to the ppg.

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

After creating an object with the new syntax, this references the new instance.

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, the this is based on the execution context of the enclosing function or object.

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() creates a new function that binds this to a specific object.

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

call() works in a similar way, but calls the function directly. Additional arguments can be passed individually.

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

apply() works like call(), but instead of individual arguments, an array is passed.

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

Method Chaining

Method chaining is the calling of several methods in succession. This results in compact, readable code. Such a call chain can be used for a fetch, for example.

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

The key to the implementation is visible on line 6. The current object is returned with this, which means that the next method call can be made directly afterwards.

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 (from ECMAScript 5) forces JavaScript to follow stricter rules.
If this mode is active, this does not implicitly reference the execution context.

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

Therefore, window or global must be explicitly accessed.