bind方法创建新函数并绑定this及预设参数,不立即执行;支持柯里化、事件绑定和回调传参;new调用时this被忽略但原型链保留。

bind 方法会创建一个新函数,在调用时将指定的 this 值绑定到该函数,并可预设部分参数,但不会立即执行。
基本语法和核心作用
调用 fn.bind(thisArg, arg1, arg2, ...) 会返回一个绑定好 this 和初始参数的新函数。原函数不受影响,新函数每次调用时 this 都固定为 thisArg,哪怕后续用 call 或 apply 也无法覆盖。
绑定 this 并预设参数
除了绑定 this,bind 还支持“柯里化”:把前几个参数固化下来,剩下参数留到调用时传入。
Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。
const greet = function(greeting, punctuation) { return `${greeting}, ${this.name}${punctuation}`; };const person = { name: 'Alice' };-
const sayHello = greet.bind(person, 'Hello');→this指向person,且第一个参数'Hello'已固定 -
sayHello('!')→ 返回"Hello, Alice!"
与 call/apply 的关键区别
call 和 apply 是立即执行,bind 只返回函数,不执行。它适合用于事件监听、回调传参、构造函数偏应用等场景。
- 事件中防止
this丢失:button.addEventListener('click', handleClick.bind(obj)); - 创建专用函数:
const add5 = (x) => x + 5;等价于const add5 = add.bind(null, 5);(若add = (a, b) => a + b) - 注意:
bind返回的函数无法再用new正确继承原型(除非原函数本身设计为构造器)
bind 后的函数仍可被 new 调用(有限支持)
如果用 new 调用 bind 返回的函数,this 会被忽略,转而指向新创建的实例,但原型链仍指向原函数的 prototype。
function Person(name) { this.name = name; }const BoundPerson = Person.bind({ age: 25 });-
const p = new BoundPerson('Bob');→p.name === 'Bob',p.age不存在,p instanceof Person为true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










