Mastering the 'this' Keyword for JavaScript Developers
The this
keyword in JavaScript is a fundamental concept that can be a bit tricky to grasp because its value depends on how a function is called. Here's a detailed explanation:
1. What is this
`?💻
The
this
keyword refers to the object that is currently executing the code.In simpler terms,
this
provides a way to access the object in which a function or a method is a property.
2. Global Context🌏
When used in the global context (outside of any function),
this
refers to the global object.In a browser, this is the
window
object.In Node.js, this is the
global
object.
console.log(this); // In a browser, it will log the `window` object
3. Function Context🚦
- Inside a regular function (not an arrow function),
this
refers to the global object in non-strict mode, andundefined
in strict mode.
function show() {
console.log(this);
}
show(); // In non-strict mode, logs the global object (e.g., `window` in browsers)
4. Method Context🌦
- When a function is called as a method of an object,
this
refers to the object that the method belongs to.
const obj = {
name: "Priyanka",
greet: function() {
console.log(this.name);
}
};
obj.greet(); // Logs "Priyanka", as `this` refers to `obj`
5. Constructor Context 🚒
- When a function is used as a constructor (called with
new
),this
refers to the newly created object.
function Person(name) {
this.name = name;
}
const person1 = new Person("Priyanka");
console.log(person1.name); // Logs "Priyanka"
6. Event Handlers🦽
- In an event handler,
this
refers to the element that received the event.
const button = document.querySelector('button');
button.addEventListener('click', function() {
console.log(this); // Logs the button element
});
7. Arrow Functions🎈
- Arrow functions behave differently with
this
. They do not have their ownthis
context; instead, they inheritthis
from the surrounding non-arrow function or global context where they are defined.
const obj = {
name: "Priyanka",
greet: function() {
const arrowFunc = () => console.log(this.name);
arrowFunc();
}
};
obj.greet(); // Logs "Priyanka", as arrow function inherits `this` from `greet` method
8. Explicit Binding🛠
- You can explicitly set
this
usingcall
,apply
, orbind
.
function greet() {
console.log(this.name);
}
const person = { name: "Priyanka" };
greet.call(person); // Logs "Priyanka", as `this` is explicitly set to `person`
9. Default Binding🎃
- When none of the above rules apply, and the function is called in a simple function call (not as a method, constructor, or with explicit binding),
this
defaults to the global object in non-strict mode andundefined
in strict mode.
Summary📃
The value of
this
is determined by how a function is called.In the global context,
this
refers to the global object.In an object's method,
this
refers to the object.In a constructor,
this
refers to the new instance.Arrow functions do not have their own
this
and inherit from their enclosing context.Explicit binding methods (
call
,apply
,bind
) can override the defaultthis
value.
Subscribe to my newsletter
Read articles from priyanka chaudhari directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
priyanka chaudhari
priyanka chaudhari
i am a full stack web developer and i write code....