JavaScript 函数的 call() 方法详解
call()
方法通过传递this
和指定值作为参数来调用函数。
示例
// 一个添加两个数字的函数
function sum(a, b) {
return a + b;
}
// 调用 sum() 函数
var result = sum.call(this, 5, 10);
console.log(result);
// 输出:
// 15
call() 语法
call()
方法的语法是:
func.call(thisArg, arg1, ...argN);
这里的func
是一个函数。
call() 参数
call()
方法可以接受两个参数:
thisArg
-thisArg
是在函数func
内部this
对象引用的对象。arg1, ... argN
(可选)- 函数func
的参数。
注意: 默认情况下,在函数中this
指向全局对象,即在网页浏览器中是window
,在node.js中是global
。
call() 返回值
- 返回用指定的
this
值和参数调用函数后获得的结果。
注意: 通过使用call()
,我们可以使用属于一个对象的函数被分配并调用给另一个对象。
示例 1:使用 call() 方法
function sum(a, b) {
return a + b;
}
// 通过传递 this 和 'a', 'b' 参数调用 sum()
let result = sum.call(this, 5, 3);
console.log(result);
输出:
8;
在上面的示例中,我们定义了一个函数sum()
,它返回两个数字的和。
然后我们使用call()
方法以sum.call(this, 5, 3)
的形式调用了sum()
。
这里,默认情况下函数内的this
被设置为全局对象。
示例 2:使用和不使用 call() 方法
// 一个计算两个数字乘积的函数
function product(a, b) {
return a * b;
}
// 不使用 call() 方法直接调用 product()
let result1 = product(5, 2);
console.log("不使用 call() 方法的返回值: " + result1);
// 使用 call() 方法调用 product()
let result2 = product.call(this, 5, 2);
console.log("使用 call() 方法的返回值: " + result2);
输出:
不使用 call() 方法的返回值: 10
使用 call() 方法的返回值: 10
在上面的示例中,我们调用了product()
函数:不使用call()
和使用call()
。
- 不使用
call()
- 我们可以直接调用product()
,如product(5, 2)
。 - 使用
call()
- 我们需要传递this
参数,如product.call(this, 5, 2)
。
示例 3:在 call() 中传递对象作为 this 值
// 对象定义
const human = {
firstName: "Judah",
lastName: "Parker",
age: 26,
};
// 函数定义
function greet() {
const string = `My name is ${this.firstName} ${this.lastName}. I am ${this.age} years old.`;
console.log(string);
}
// 在 call() 方法中传递对象作为 this 值
greet.call(human);