apply方法立即执行函数并绑定this,参数以数组形式传入;语法为func.apply(thisArg, [arg1, arg2, ...]),常用于改变this指向、借用方法、求数组最值等场景。

apply 方法能立刻执行函数,并把 this 绑定到指定对象,同时把参数以数组形式传入。
基本语法和核心作用
调用格式是:func.apply(thisArg, [arg1, arg2, ...])。第一个参数决定函数内部 this 指向谁;第二个参数必须是数组(或类数组对象),它的每一项会作为独立参数传给函数。
改变 this 指向的典型用法
当函数内部依赖 this 访问属性或方法时,用 apply 可临时切换上下文:
- 借用其他对象的方法,比如让数组调用类数组的
push或slice - 在事件处理、回调中固定
this,避免丢失(虽然现在更常用箭头函数或bind) - 实现继承时,让子构造函数调用父构造函数初始化自身
传入数组参数的实际例子
比如求数组最大值,Math.max() 不接受数组,但可以这样绕过:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
let arr = [3, 7, 2];let max = Math.max.apply(null, arr); // 返回 7
这里 null 表示不关心 this(Math.max 是纯函数),arr 被展开为 Math.max(3, 7, 2)。
再比如构造函数调用:
function Person(name, age) {this.name = name;
this.age = age;
}
let args = ['Alice', 25];
let p = new Person(...args); // ES6 展开语法更简洁
// 用 apply 需配合 Object.create + apply 实现类似效果(较少直接 new apply)
注意点和替代方案
apply 是立即执行的,不能延迟;如果只需绑定 this 不执行,用 bind;如果参数已是数组且支持展开,ES6 的 ... 更直观:
-
func.apply(obj, arr)等价于func(...arr)(前提是this在当前作用域已正确) - 类数组对象(如
arguments)也能传给apply,不需要先转成真数组 - 传
undefined或null作thisArg,非严格模式下会被自动转为全局对象(window或global)

















