apply的核心作用是临时将函数借给另一对象执行并指定this和参数数组;语法为func.apply(thisarg, [args]),常用于处理类数组或手动绑定this,区别于call(参数逐个传)和bind(返回新函数)。

apply 的核心作用是临时把一个函数“借给”另一个对象执行,同时指定 this 指向和参数列表。
基本用法:改变 this 并传入参数数组
语法:func.apply(thisArg, [arg1, arg2, ...])
-
thisArg:函数内部this将指向的对象 - 第二个参数必须是数组(或类数组),元素依次作为函数的实参
- 如果不需要传参,可传空数组
[]或null
常见借用场景
1. 借 Array.prototype 方法处理类数组
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
比如 arguments、NodeList 不是真正的数组,但可以借用 slice、push 等方法:
function sum() {
// 把 arguments 转成真数组
const arr = Array.prototype.slice.apply(arguments);
return arr.reduce((a, b) => a + Number(b), 0);
}
2. 手动绑定 this 并传参
当函数需要在特定上下文中运行,且参数已组织成数组时:
const person = { name: 'Alice', age: 30 };
function introduce(greeting, from) {
console.log(`${greeting}, I'm ${this.name} and I'm from ${from}.`);
}
introduce.apply(person, ['Hi', 'Beijing']); // Hi, I'm Alice and I'm from Beijing.
apply 和 call、bind 的区别
-
call:参数逐个列出,如func.call(obj, a, b, c) -
apply:参数必须是数组形式,如func.apply(obj, [a, b, c]) -
bind:不立即执行,返回一个新函数,this和部分参数被固化
注意事项
- 若传入的
thisArg是null或undefined,非严格模式下会自动转为全局对象(如window),严格模式下保持null/undefined - 确保传入的第二个参数确实是数组或类数组,否则会报错
- 现代 JS 中,可用扩展运算符替代部分 apply 场景,例如
Math.max(...arr)替代Math.max.apply(null, arr)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










