JavaScript显式绑定实现方法借用的核心是用call、apply或bind手动指定this,使对象临时使用其他对象的方法;call/apply用于一次性调用,bind用于预绑定生成可复用函数;原型链方法也可借用;箭头函数因无独立this而无法被显式绑定。

JavaScript 显式绑定中实现类似“方法借用”,核心是用 call、apply 或 bind 手动指定函数执行时的 this,让一个对象“临时使用”另一个对象的方法。
用 call/apply 直接调用(一次性借用)
这是最常用、最直观的借用方式。你把目标方法从原对象取出来,立刻用 call 或 apply 绑定到新对象上执行。
-
call(obj, arg1, arg2, ...):传入具体参数列表 -
apply(obj, [arg1, arg2, ...]):第二个参数是参数数组
例如:
const person = { name: 'Alice', greet() { return `Hello, I'm ${this.name}`; } };const other = { name: 'Bob' };
person.greet.call(other); // "Hello, I'm Bob"
用 bind 预绑定(可复用的借用)
如果需要多次在不同上下文中复用同一方法,用 bind 创建一个“预设好 this”的新函数更合适。
立即学习“Java免费学习笔记(深入)”;
-
bind返回新函数,不会立即执行 - 绑定后的新函数,无论怎么调用,
this都固定为指定对象
例如:
const logName = person.greet.bind({ name: 'Charlie' });logName(); // "Hello, I'm Charlie"
// 即使 later 赋给别的对象,this 也不变
注意原型链上的方法也能借用
借用不局限于自有属性。只要能访问到方法(比如通过原型),就能借用。
-
Array.prototype.slice.call(arguments)是经典例子:借用数组方法处理类数组 - 现代可用
Array.from()或展开运算符替代,但原理仍是显式绑定思想
例如:
function sum() {return Array.prototype.reduce.call(arguments, (a, b) => a + b, 0);
}
sum(1, 2, 3); // 6
箭头函数不能被显式绑定
箭头函数没有自己的 this,它继承外层作用域的 this,因此 call、apply、bind 对它无效。
- 试图绑定箭头函数的
this不会报错,但也不会生效 - 需要借用时,确保源方法是普通函数(
function或方法定义语法)


















