硬绑定是用bind方法将函数this永久锁定到指定对象,返回新函数且可预设参数;新函数调用时this恒为绑定对象,不受调用方式影响,但new调用时this指向新实例。

硬绑定就是用 bind 方法把函数的 this 永久锁定到某个对象上,之后无论怎么调用,this 都不会变。
硬绑定的基本写法
调用 bind 会返回一个新函数,原函数本身不变。新函数的 this 被固定,且可以预设部分参数(即“柯里化”)。
const boundFn = originalFn.bind(thisArg, arg1, arg2)-
thisArg是你想绑定给this的对象 - 后面的参数(可选)会在新函数被调用时,作为前置参数传入原函数
硬绑定后 this 不再受调用方式影响
即使把绑定后的函数赋值给变量、作为回调、或在事件中使用,this 依然保持绑定时指定的对象。
- 普通函数调用:
boundFn()→this是绑定对象 - 作为方法赋值:
obj.method = boundFn; obj.method()→this还是绑定对象,不是obj - 作为事件监听器:
btn.addEventListener('click', boundFn)→ 点击时this仍是绑定对象,不是btn
bind 返回的新函数不能被 new 覆盖 this
用 new 调用硬绑定函数时,this 会指向新创建的实例,而不是 bind 指定的对象——这是 JavaScript 的特殊规则。但注意:此时原绑定的对象会被忽略,而预设参数仍有效。
立即学习“Java免费学习笔记(深入)”;
function Person(name) { this.name = name; }const BoundPerson = Person.bind({ age: 99 }, 'Alice');-
new BoundPerson()→ 创建实例,this是新对象,name是'Alice',但age不会出现在实例上
和 call/apply 的关键区别
call 和 apply 是立即执行,并临时设置 this;bind 不执行,只返回一个 this 已锁定的新函数,等你后续调用。
-
fn.call(obj, 1, 2)→ 立即运行,this是obj -
const fn2 = fn.bind(obj, 1); fn2(2)→ 分两步,最终效果等价于fn.call(obj, 1, 2)



















