This site is mobile accessible. Press the "Tap Here" button to use a different font-size.
Smartphone icons created by Freepik - Flaticon
7.12 JS this Keyword
const person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
What is this?
- In JavaScript, the this keyword refers to an object.
- Which object depends on how this is being invoked (used or called).
- The this keyword refers to different objects depending on how it is used:
In an object method, this refers to the object. |
Alone, this refers to the global object. |
In a function, this refers to the global object. |
In a function, in strict mode, this is undefined. |
In an event, this refers to the element that received the event. |
Methods like call(), apply(), and bind() can refer this to any object. |
- Note
- this is not a variable. It is a keyword. You cannot change the value of this.
this in a Method
- When used in an object method, this refers to the object.
- In the example on top of this page, this refers to the person object.
- Because the fullName method is a method of the person object.
fullName : function() {
return this.firstName + " " + this.lastName;
}
Try it yourself
this Alone
- When used alone, this refers to the global object.
- Because this is running in the global scope.
- In a browser window the global object is [object Window]:
let x = this;
In strict mode, when used alone, this also refers to the global object
"use strict";
let x = this;
this in a Function (Default)
- In a function, the global object is the default binding for this.
- In a browser window the global object is [object Window]:
function myFunction() {
return this;
}
this in a Function (Strict)
- JavaScript strict mode does not allow default binding.
- So, when used in a function, in strict mode, this is undefined.
"use strict";
function myFunction() {
return this;
}
this in Event Handlers
In HTML event handlers, this refers to the HTML element that received the event:
<button onclick="this.style.display='none'">
Click to Remove Me!
</button>
Object Method Binding
In these examples, this is the person object:
const person = {
firstName : "John",
lastName : "Doe",
id : 5566,
myFunction : function() {
return this;
}
};
const person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
i.e. this.firstName is the firstName property of this (the person object).
Explicit Function Binding
- The call() and apply() methods are predefined JavaScript methods.
- They can both be used to call an object method with another object as argument.
- The example below calls person1.fullName with person2 as an argument, this refers to person2, even if fullName is a method of person1:
const person1 = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
const person2 = {
firstName:"John",
lastName: "Doe",
}
// Return "John Doe":
person1.fullName.call(person2);
Function Borrowing
- With the bind() method, an object can borrow a method from another object.
- This example creates 2 objects (person and member).
- The member object borrows the fullname method from the person object:
const person = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
const member = {
firstName:"Hege",
lastName: "Nilsen",
}
let fullName = person.fullName.bind(member);
This Precedence
To determine which object this refers to; use the following precedence of order.
Precedence |
Object |
1 |
bind() |
2 |
apply() and call() |
3 |
Object method |
4 |
Global scope |
- Is this in a function being called using bind()?
- Is this in a function being called using apply()?
- Is this in a function being called using call()?
- Is this in an object function (method)?
- Is this in a function in the global scope?
JavaScript icons used in the buttons provided by ICONS8.COM. Smartphone icons created by Freepik - Flaticon
Example files created in this module:
JS Sets Map Objects part 1
JS Sets Map Objects part 2
JS Sets Map Objects part 3
JS Sets Map Objects part 4
JS Sets Map Objects part 5
JS Sets Delete Map Objects
JS Sets Map.has() part 1
JS Sets Map.has() part 2
JS Sets Map Objects forEach()
JS Sets Map Objects Map.entries()
JS Map Objects
JS Map Objects - Map.set() part 1
JS Map Objects - Map.set() part 2
JS Map Objects Map.get()
JS Map Objects - Map.size
JS Map Objects - Map.delete()
JS Map Objects - Map.has() part 1
JS Map Objects - Map.has() part 2
JS Map Objects - Map.forEach()
JS Map Objects - Map.entries()
JS typeof Operator part 1
JS typeof Operator part 2
JS typeof Operator part 3
JS typeof Properties - constructor Property part 1
JS typeof Properties - constructor Property part 2
JS typeof Properties - Array Object
JS typeof Operator - Date Object
JS typeof Operator - Date Function
JS typeof Operator - undefined part 1
JS typeof Operator - undefined part 2
JS typeof Operator - empty values
JS typeof Operator - null
JS typeof Operator - undefined Data Type
JS instanceof Operator
JS void Operator
JS Operators - typeof Operator
JS Properties - constructor Property
JS Arrays - isArray() function part 1
JS Arrays - isArray() function part 2
JS Date Object - isDate() function part 1
JS Date Object - isDate() function part 2
JS Converting Numbers to Strings part 1
JS Converting Numbers to Strings part 2
JS typeof Operator part 1
JS typeof Operator part 2
JS Bitwise AND
JS Bitwise OR
JS Bitwise XOR
JS Bitwise NOT
JS Bitwise Left
JS Bitwise Right
JS Unsigned Bitwise Right
JS Convert Decimal to Binary
JS Convert Binary to Decimal
JS String Methods
JS Regular Expressions part 1
JS String Methods - String replace()
JS Regular Expressions part 2
JS Regular Expressions part 3
JS Error Handling part 1
JS try catch
JS Errors - RangeError
JS Errors - ReferenceError
JS Errors - SyntaxError
JS Errors - TypeError
JS Errors - URIError
JS Scope - Local Variables
JS Scope - GLOBAL Variable
JS Global Variables
JS Scope - Global HTML variables
JS Hoisted Declarations part 1
JS Hoisted Declarations part 2
JS Hoisting part 1
JS Hoisting part 2
JS Initializations are Not Hoisted part 1
JS Initializations are Not Hoisted part 2
JS Initializations are Not Hoisted part 3
JS "use strict" Mode part 1
JS "use strict" Mode part 2
JS this Keyword
JS this Keyword [object Window] part 1
JS this Keyword - window object
JS this Keyword [object Window] part 2
JS this Keyword - Function
JS this Keyword - Event Handler
JS this Keyword - Event Handler
JS this Keyword - person object part 1
JS this Keyword - person object part 2
JS this Keyword - Explicit Function Binding
JS this Keyword - Function bind()
JS this Keyword - Arrow Function part 1
JS this Keyword - Arrow Function part 2