javascript显式绑定通过call、apply、bind实现,手动指定this指向;call立即执行并逐个传参,apply立即执行但批量传参(数组形式),bind返回固定this的新函数且支持柯里化;显式绑定优先级高于隐式和默认绑定但低于new绑定,箭头函数无this不可被显式绑定。

JavaScript 中显式绑定主要通过 call、apply 和 bind 三个方法实现,核心是手动指定函数执行时的 this 指向,从而让一个对象的方法“借用”给另一个对象使用。
用 call 借用方法并传参
call 立即执行函数,并将第一个参数设为 this 值,后续参数逐个传入。
- 适合已知参数个数的场景
- 例如:
obj1.method.call(obj2, 'a', 'b')表示以obj2为this调用obj1.method,并传入'a'和'b' - 常用于数组方法借用:比如
Array.prototype.slice.call(arguments)把类数组转成真数组
用 apply 借用方法并传入数组参数
apply 也立即执行,但第二个参数必须是数组(或类数组),用于批量传参。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 适合参数数量不确定或已存在数组的情况
- 例如:
Math.max.apply(null, [1, 2, 3])相当于Math.max(1, 2, 3) - 与
call功能类似,只是参数传递方式不同
用 bind 创建可复用的绑定函数
bind 不执行函数,而是返回一个新函数,其 this 固定,还可预设部分参数(柯里化)。
- 返回的函数可以多次调用,
this不会变 - 例如:
const boundFn = obj1.method.bind(obj2, 'x'),之后调用boundFn('y')相当于obj1.method.call(obj2, 'x', 'y') - 常用于事件回调、定时器中保持
this正确,比如button.addEventListener('click', handler.bind(obj))
注意 this 绑定优先级和箭头函数限制
显式绑定(call/apply/bind)优先级高于隐式绑定和默认绑定,但低于 new 绑定;而箭头函数没有自己的 this,不能被显式绑定改变。
- 箭头函数的
this是词法作用域决定的,call或bind对它无效 - 如果目标方法是箭头函数,借用会失败,应改用普通函数
- 严格模式下,
call(null)中的this就是null,非严格模式下会自动转为全局对象
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










