Explaining ‘this’ keyword in JavaScript

1. Global Context

When used in the global context (outside of any function), this refers to the global object, which is window in browsers and global in Node.js.
console.log(this); // In a browser, this logs the Window object

2. Function Context

In a regular function, the value of this depends on how the function is called.

a. Function Invocation
When a function is called as a standalone function, this refers to the global object (in non-strict mode) or undefined (in strict mode).

function foo() { console.log(this);
} foo(); // In non-strict mode, logs the global object (Window in browsers) // In strict mode, logs undefined 
Enter fullscreen mode
Exit fullscreen mode

b. Method Invocation
When a function is called as a method of an object, this refers to the object the method is called on.

const obj = { method: function() { console.log(this); }
}; obj.method(); // Logs the obj object 
Enter fullscreen mode
Exit fullscreen mode

c. Constructor Invocation
When a function is used as a constructor (with the new keyword), this refers to the newly created object.

function Person(name) { this.name = name;
} const person = new Person('Alice');
console.log(person.name); // Logs 'Alice' 
Enter fullscreen mode
Exit fullscreen mode

3. Arrow Functions

Arrow functions (=>) do not have their own this binding. Instead, this is lexically inherited from the outer function where the arrow function is defined.

const obj = { regularFunction: function() { console.log(this); // Logs obj const arrowFunction = () => { console.log(this); // Logs obj because it inherits `this` from regularFunction }; arrowFunction(); }
}; obj.regularFunction(); 
Enter fullscreen mode
Exit fullscreen mode

4. Event Handlers

In DOM event handlers, this refers to the element that received the event.

document.getElementById('myButton').addEventListener('click', function() { console.log(this); // Logs the button element
}); 
Enter fullscreen mode
Exit fullscreen mode

5. Explicit Binding

JavaScript provides methods to explicitly set the value of this using call, apply, and bind.

a. call and apply
call and apply methods call a function with a specified this value and arguments. The difference between them is how they handle arguments.

function greet(greeting) { console.log(greeting + ', ' + this.name);
} const person = { name: 'Alice' }; greet.call(person, 'Hello'); // Logs 'Hello, Alice'
greet.apply(person, ['Hi']); // Logs 'Hi, Alice' 
Enter fullscreen mode
Exit fullscreen mode

b. bind
bind creates a new function that, when called, has its this keyword set to the provided value.

function greet() { console.log(this.name);
} const person = { name: 'Alice' };
const boundGreet = greet.bind(person); boundGreet(); // Logs 'Alice' 
Enter fullscreen mode
Exit fullscreen mode

Summary

Global context: this refers to the global object.
Function context:
Regular function: this is the global object or undefined in strict mode.
Method: this is the object the method belongs to.
Constructor: this is the new object being created.

Arrow functions: this is lexically inherited from the outer function.
Event handlers: this is the event target element.
Explicit binding: Use call, apply, and bind to explicitly set this.


Discover more from Coursity

Subscribe to get the latest posts sent to your email.

Leave a Comment

Your email address will not be published. Required fields are marked *

Discover more from Coursity

Subscribe now to keep reading and get access to the full archive.

Continue reading

Scroll to Top
Please set api key. Semi automatic top loading washing machine turbodry technology.