call用于显式绑定this,语法为func.call(thisarg, arg1, arg2...),立即执行函数;参数逐个传入,适用于已知参数个数的场景。

JavaScript 中用 call 实现显式绑定,就是手动指定函数执行时的 this 值。
call 的基本用法
call 是函数对象上的方法,语法是:func.call(thisArg, arg1, arg2, ...)
第一个参数是希望函数内部 this 指向的对象,后面是传给函数的实际参数。
- 如果
thisArg是null或undefined,非严格模式下指向全局对象(如浏览器中是window),严格模式下保持为null/undefined - 如果
thisArg是原始值(如字符串、数字、布尔值),会被自动包装成对应类型的对象(例如"abc"→new String("abc")) - 函数会立即执行,不是返回新函数(这点和
bind不同)
常见使用场景
借用其他对象的方法
比如让数组方法处理类数组对象:
const arrayLike = {0: 'a', 1: 'b', length: 2};
Array.prototype.forEach.call(arrayLike, (item) => console.log(item));
// 输出:a,b
实现继承或临时切换上下文
让一个对象“借用”另一个对象的方法并绑定自己的数据:
const person = { name: 'Alice' };
function introduce(age) {
console.log(`I'm ${this.name} and ${age} years old.`);
}
introduce.call(person, 30); // I'm Alice and 30 years old.
call 和 apply、bind 的区别
call:参数逐个列出,适合已知参数个数的情况
apply:第二个参数是数组或类数组,适合参数动态收集的场景(如 Math.max.apply(null, arr))
bind:不立即执行,返回一个新函数,this 被永久绑定,后续调用时可再传参
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
三者都用于显式绑定 this,但执行时机和参数传递方式不同。
注意 this 绑定的优先级
显式绑定(call/apply/bind)优先级高于隐式绑定(如 obj.fn())和默认绑定,但低于 new 绑定和箭头函数的词法 this。
例如:
function foo() { console.log(this.a); }
const obj1 = { a: 1 };
const obj2 = { a: 2 };
foo.call(obj1).call(obj2); // 仍输出 1,因为第二次 call 对 foo 的返回值(undefined)起作用,不是对 foo 本身
要链式改变 this,需确保每次调用的是函数本身,而不是它的返回值。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










