apply方法核心是绑定this并用数组传参,如func.apply(thisArg, [arg1, arg2]);常用于借用数组方法、动态传参等;与call(逐个传参)、bind(返回预置参数的新函数)不同,ES6中可用...arr替代但需call配合设this。

apply 方法本身就能用数组传参并指定 this,不需要“改成”——它本来就是这么设计的。
apply 的核心作用:指定 this + 用数组传参
func.apply(thisArg, [arg1, arg2, ...]) 会把 thisArg 绑定为函数内部的 this,同时将数组中的每一项作为独立参数传入函数。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
例如:
function sum(a, b, c) {
return a + b + c + this.multiplier;
}
const obj = { multiplier: 10 };
console.log(sum.apply(obj, [1, 2, 3])); // 输出 16(1+2+3+10)
常见使用场景
-
借用原生方法:比如让类数组对象(如
arguments或NodeList)调用数组方法 - 动态传参:参数数量不确定,但已收集在数组中
- 继承/混入:在构造函数或初始化逻辑中复用父级方法
和 call、bind 的区别要点
-
call:参数逐个列出,不支持数组直接传参 -
apply:第二个参数必须是数组(或类数组),自动展开 -
bind:返回新函数,不立即执行;bind(thisArg, ...args)支持部分预置参数,但不是数组形式传参
注意点
- 第二个参数可以是真数组,也可以是类数组(如
{ length: 2, 0: 'a', 1: 'b' }) - 传
null或undefined作thisArg,非严格模式下会指向全局对象(如window),严格模式下保持null/undefined - ES6 后常用扩展运算符替代,如
func(...arr),但不支持设this,需配合call使用:func.call(thisArg, ...arr)

















