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

apply 方法本身就能用数组传参并指定 this,不需要“改成”——它本来就是这么设计的。
apply 的核心作用:指定 this + 用数组传参
func.apply(thisArg, [arg1, arg2, ...]) 会把 thisArg 绑定为函数内部的 this,同时将数组中的每一项作为独立参数传入函数。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
例如:
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)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










