JavaScript 函数的 apply() 方法详解
apply()
方法调用一个函数,传递了this
关键字的值和以数组形式提供的参数。
示例
// 对象定义
const personName = {
firstName: "Taylor",
lastName: "Jackson",
};
// 函数定义
function greet(wish, message) {
return `${this.firstName}, ${wish}. ${message}`;
}
// 通过传递两个参数调用greet()函数
let result = greet.apply(personName, ["Good morning", "How are you?"]);
console.log(result);
// 输出:
// Taylor, Good morning. How are you?
apply()语法
apply()
方法的语法是:
func.apply(thisArg, argsArray);
这里,func
是一个函数。
apply()参数
apply()
方法可以接受两个参数:
thisArg
- 调用func
时提供的this
的值。argsArray
(可选)- 包含函数参数的数组。
apply()返回值
- 返回使用指定的
this
值和参数调用的函数的结果。
示例1:使用apply()方法调用函数
// 对象定义
const personName = {
firstName: "Taylor",
lastName: "Jackson",
};
// 函数定义
function greet(wish, message) {
return `${this.firstName}, ${wish}. ${message}`;
}
// 通过传递两个参数调用greet()函数
let result = greet.apply(personName, ["Good morning", "How are you?"]);
console.log(result);
输出
Taylor, Good morning. How are you?
在上述程序中,我们使用了apply()
方法来调用greet()
函数。
在apply()
方法中,参数:
- personName - 是
this
的值 ["Good morning", "How are you?"]
- 是greet()
函数的"wish"
和"message"
参数的值
该方法调用了greet()
函数,所以result变量持有greet()
的返回值。
除了调用函数,我们还可以使用apply()
方法来:
- 借用函数
- 连接两个数组
示例2:使用apply()进行函数借用
// 对象定义
const car = {
name: "BMW",
description() {
return `The ${this.name} is of ${this.color} color.`;
},
};
// 对象定义
const bike = {
name: "Duke",
color: "black",
};
// bike使用apply()从car借用description()方法
let result = car.description.apply(bike);
console.log(result);
输出
The Duke is of black color.
在上述程序中,我们使用apply()
方法在bike
对象中借用了car
对象的方法。
示例3:使用apply()连接两个数组
let color1 = ["Red", "Green", "Blue"];
let color2 = ["Yellow", "Black"];
// 连接两个数组color1和color2
color1.push.apply(color1, color2);
console.log(color1);
输出
["Red", "Green", "Blue", "Yellow", "Black"];
示例4:在内置函数中使用apply()
const numbers = [5, 1, 4, 3, 4, 6, 8];
// 使用Math对象中的apply()
let max = Math.max.apply(null, numbers);
console.log(max);
// 不使用Math对象中的apply()
let max1 = Math.max(5, 1, 4, 3, 4, 6, 8);
console.log(max1);
输出
8;
8;