apply方法用于显式指定函数内部this指向并以数组形式传参,语法为func.apply(thisArg, [argsArray]);其核心作用是动态绑定this和批量传参,适用于借用方法、构造函数继承等场景。

apply 方法用于在调用函数时,显式指定该函数内部 this 的指向,并以数组(或类数组对象)形式传入参数。
基本语法和作用
它的标准写法是:func.apply(thisArg, [argsArray])。
其中:
- thisArg 是函数执行时 this 将引用的对象;
- argsArray 是一个数组或类数组(如 arguments),元素将作为参数依次传给函数。
常见动态绑定 this 的场景
当需要把一个方法“借”给另一个对象使用,或者统一控制上下文时,apply 就很实用:
- 借用原生方法:比如让类数组对象(如
arguments或NodeList)调用数组方法 - 实现继承或方法复用:子构造函数调用父构造函数初始化实例属性
- 批量调用带固定 this 的函数,比如事件处理器、回调中修正上下文
实际例子说明
例如,你想让一个普通对象临时拥有数组的 push 行为:
const obj = { length: 0 };
Array.prototype.push.apply(obj, ['a', 'b', 'c']);
console.log(obj); // {0: 'a', 1: 'b', 2: 'c', length: 3}
再比如,在构造函数中复用父类初始化逻辑:
立即学习“Java免费学习笔记(深入)”;
function Animal(name) {
this.name = name;
}
function Dog(name, breed) {
Animal.apply(this, [name]); // 把 this 绑定到新 Dog 实例,执行 Animal 初始化
this.breed = breed;
}
和 call、bind 的区别要点
- apply 接收参数数组,适合参数数量不确定或已组织成数组的情况
- call 参数逐个列出,适合参数明确且数量少
- bind 不立即执行,而是返回一个新函数,this 和部分参数被预先绑定


















