call方法立即执行函数并显式绑定this,语法为func.call(thisarg, arg1, arg2...),第一个参数指定this指向,后续为实参;null/undefined在非严格模式下指向全局对象,严格模式下保持原值;原始值自动包装;常用于借用方法、修正this、构造函数继承;与apply(参数为数组)和bind(返回新函数)不同。

call 方法能立刻执行函数,并把 this 显式绑定到你传入的第一个参数上。
基本语法和核心用法
调用形式是:func.call(thisArg, arg1, arg2, ...)。第一个参数决定函数内部 this 指向谁,后面的参数是函数实际接收的参数。
- 如果
thisArg是null或undefined,非严格模式下this指向全局对象(如浏览器中的window),严格模式下就是null或undefined - 如果
thisArg是原始值(如字符串、数字),会被自动包装成对应包装对象(如"abc"→new String("abc")) -
call立即调用函数,不返回新函数 —— 这点和bind不同
常见使用场景
常用于借用方法、修正 this、实现继承或临时切换上下文。
-
借用数组方法:类数组对象(如
arguments、NodeList)没有slice,但可以用Array.prototype.slice.call(arguments)转成真数组 -
改变 this 指向调用:比如
obj.method.call(otherObj, 'a', 'b')让method内部的this指向otherObj -
构造函数继承:子构造函数中用
Parent.call(this, ...)复用父类初始化逻辑
和 apply、bind 的区别
三者都用于控制 this,但行为不同:
-
call:立即执行,参数逐个列出 -
apply:立即执行,第二个参数是数组或类数组 -
bind:不执行,返回一个this已绑定的新函数,可 later 调用
简单例子帮你理解
假设有个函数:
function greet(greeting, punctuation) {return `${greeting}, ${this.name}${punctuation}`;
}
再有对象:
const person = { name: 'Alice' };那么:
greet.call(person, 'Hello', '!'); // "Hello, Alice!"这里 this 被绑定到 person,所以能访问 person.name。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











