The call()
method calls a function by passing this
and specified values as arguments.
Example
//function that adds two numbers
function sum(a, b) {
return a + b;
}
// calling sum() function
var result = sum.call(this, 5, 10);
console.log(result);
//Output:
// 15
call() Syntax
The syntax of the call()
method is:
func.call(thisArg, arg1, ... argN)
Here, func
is a function.
call() Parameters
The call()
method can take two parameters:
thisArg
- ThethisArg
is the object that thethis
object references inside the functionfunc
.arg1, ... argN
(optional) - Arguments for the functionfunc
.
Note: By default, in a function this
refers to the global object i.e, window in web browsers and global
in node.js.
call() Return Values
- Returns the result obtained from calling the function with the specified
this
value and arguments.
Note: By using call()
, we can use the functions belonging to one object to be assigned and called for a different object.
Example 1: Using call() Method
function sum(a, b) {
return a + b;
}
// invoking sum() by passing this and 'a', 'b' arguments
let result = sum.call(this, 5, 3);
console.log(result);
Output:
8
In the above example, we have defined a function sum()
that returns the sum of two numbers.
We have then used the call()
method to call sum()
as sum.call(this, 5, 3)
.
Here, by default, the this
inside the function is set to the global object.
Example 2: With and Without Using call() Method
// function that finds product of two numbers
function product(a, b) {
return a * b;
}
// invoking product() without using call() method
let result1 = product(5, 2);
console.log("Return value Without using call() method: " + result1);
// invoking product() using call() method
let result2 = product.call(this, 5, 2);
console.log("Return value Using call() method: " + result2);
Output:
Return value Without using call() method: 10 Return value Using call() method: 10
In the above example, we have called the product()
function: without using call()
and using call()
.
- Without using
call()
- we can directly invokeproduct()
asproduct(5, 2)
. - Using
call()
- we have to passthis
argument asproduct.call(this, 5, 2)
.
Example 3: Passing Object as this Value in call()
// object definition
const human = {
firstName: "Judah",
lastName: "Parker",
age: 26,
};
// function definition
function greet() {
const string = `My name is ${this.firstName} ${this.lastName}. I am ${this.age} years old.`;
console.log(string);
}
// passing object as this value in call() method
greet.call(human);
Output
My name is Judah Parker. I am 26 years old.
In the above example, we have defined the greet()
function inside which we have defined a variable string that can access the values of human.
We have then passed the human object as this
value in the call()
method as greet.call(human)
, which calls greet()
.
Example 4: Using call() to Chain Constructors
//function definition
function Animal(name, age) {
this.name = name;
this.age = age;
}
//function definition
function Horse(name, age) {
Animal.call(this, name, age);
this.sound = "Neigh";
}
//function definition
function Snake(name, age) {
Animal.call(this, name, age);
this.sound = "Hiss";
}
const snake1 = new Snake("Harry", 5);
console.log(snake1.name, snake1.age, snake1.sound);
const horse1 = new Horse("Arnold", 8);
console.log(horse1.name, horse1.age, horse1.sound);
Output
Harry 5 Hiss Arnold 8 Neigh
Note: The difference between call()
and apply()
is that call()
accepts an argument list, while apply()
accepts a single array of arguments.
Recommended Reading: JavaScript Function apply()