The value of "this" when a Javascript function is invoked as a method of an object.
Functions are called methods when they are assigned to an object property.
In the following code, we create a person object and assign a couple of properties: name
and age
.
Later, we assign a new property, called ability
to the object. This property is set to a function that returns a string.
We can invoke person.ability()
and this function call is said to be a method call of the person
object.
const person = {
name: 'John',
age: 50
}
person.ability = function () {
return 'I can play the piano'
}
console.log(person.ability()); // => I can play the piano
When we call a function as a method, the related object on which the function is defined becomes the context of the function and within the function, the this parameter is set to this object.
We can verify this by printing out the value of this
from within the ability
function. From within the function, this
returns the object that invoked the function, which is the person
object.
person.ability = function () {
console.log(this);
return 'I can play the piano';
}
// Prints out the value of this, that is the object that called the function
// => { name: 'John', age: 50, ability: [Function] }
It's important to note that the same function can have different contexts depending on how it's invoked.
As an example, in the following code, we define a myAbility
function and then assign this same function to two different objects.
When we print out the value of this
from inside the function, we see that this
refers to two different objects, depending on where the function is invoked.
const myAbility = function (ability) {
console.log(this);
return `I can ${ability}`;
}
const mary = {
name: 'Mary',
ability: myAbility
}
const pedro = {
name: 'Pedro',
ability: myAbility
}
mary.ability('play the piano');
// Value of this: { name: 'Mary', ability: [Function: myAbility] }
pedro.ability('eat hot dogs');
// Value of this: { name: 'Pedro', ability: [Function: myAbility] }
When we call myAbility
on the object mary, the value of this
is the object mary
:
{ name: 'Mary', ability: [Function: myAbility] }
When we call myAbility
on the object pedro, on the other hand, the value of this
is the object pedro
:
{ name: 'Pedro', ability: [Function: myAbility] }
In the next article we will explore what happens to the this
parameter when we invoke constructor functions.
Top comments (0)