apply方法通过数组传参并显式指定this指向:第一个参数为this绑定对象(null/undefined在非严格模式下指向全局对象),第二个参数为数组或类数组;常用于借用方法、动态传参和继承逻辑。

apply 方法通过传入一个数组(或类数组对象)作为参数列表,来调用函数并显式指定 this 的指向。
apply 的基本语法
函数对象的 apply 方法接收两个参数:
- 第一个参数:要绑定给函数内部
this的对象(可以是null或undefined,此时非严格模式下this指向全局对象,严格模式下为undefined) - 第二个参数:一个数组或类数组对象(如
arguments、NodeList),它的每一项会作为函数的实参依次传入
改变 this 并传参的实际写法
例如有一个函数和一个目标对象:
function greet(greeting, punctuation) {
return `${greeting}, ${this.name}${punctuation}`;
}
const person = { name: 'Alice' };
用 apply 调用并指定 this:
-
greet.apply(person, ['Hello', '!'])→ 返回"Hello, Alice!" -
greet.apply({ name: 'Bob' }, ['Hi', '.'])→ 返回"Hi, Bob." -
greet.apply(null, ['Hey', '?'])→ 非严格模式下this是全局对象,this.name通常为undefined;严格模式下报错或返回"Hey, undefined?"
常见用途场景
apply 常用于以下情况:
-
借用方法:比如让数组方法处理类数组对象 ——
Array.prototype.slice.apply(arguments) -
动态传参:当参数数量不确定且已存在一个数组时,比
call更方便 -
继承或重用逻辑:在构造函数或工具函数中统一控制
this上下文
与 call 和 bind 的区别要点
三者都可改写 this,但行为不同:
-
call:参数逐个列出,适合已知参数个数 -
apply:第二个参数必须是数组/类数组,适合参数以集合形式存在 -
bind:不立即执行,返回新函数,this和部分参数被预设
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











