跳到主要内容

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;

推荐阅读: JavaScript函数Function.call()