DEV Community

Cover image for How 'this' keyword's value is determined in Javascript
Mridul Tailor
Mridul Tailor

Posted on

How 'this' keyword's value is determined in Javascript

In JavaScript, the this keyword refers to the current execution context. In other words, it represents the object that the currently executing code belongs to.

The value of this is determined based on how a function is called, and can have different values depending on the context in which it is used.

Here are some general rules for determining the value of this:

  1. If a function is called as a method of an object, this refers to the object itself.

For example:

const myObj = {
  name: "John",
  greet: function() {
    console.log("Hello, " + this.name + "!");
  }
};

myObj.greet(); // Output: "Hello, John!"
Enter fullscreen mode Exit fullscreen mode

In this example, when the greet() method is called on myObj, this refers to myObj, so this.name returns the value of the name property of myObj.

  1. If a function is called as a standalone function, this refers to the global object (in the browser, this is typically the window object).

For example:

function sayHello() {
  console.log("Hello, " + this.name + "!");
}

sayHello(); // Output: "Hello, undefined!"
Enter fullscreen mode Exit fullscreen mode

In this example, this refers to the global object, so this.name returns undefined.

  1. If a function is called using the new keyword, this refers to the newly created object.

For example:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

const john = new Person("John", 30);
console.log(john.name); // Output: "John"
Enter fullscreen mode Exit fullscreen mode

In this example, this refers to the newly created object john, so this.name and this.age set the properties of john.

  1. If a function is called using call() or apply(), this refers to the object passed as the first argument.

For example:

const person1 = {
  name: "John",
  age: 30
};

const person2 = {
  name: "Jane",
  age: 25
};

function greet() {
  console.log("Hello, " + this.name + "!");
}

greet.call(person1); // Output: "Hello, John!"
greet.apply(person2); // Output: "Hello, Jane!"
Enter fullscreen mode Exit fullscreen mode

In these examples, this refers to person1 when greet() is called using call(), and person2 when it is called using apply(), so this.name returns the value of the name property of the respective objects.

These are just a few examples of how the value of this is determined in JavaScript.

Top comments (0)