call方法立即执行函数并指定this值及逐个传参,语法为func.call(thisArg, arg1, arg2...),常用于类数组处理、构造函数继承和事件回调绑定,区别于apply(参数为数组)和bind(返回预绑定函数)。

call 方法能立刻执行函数,并把指定对象设为该函数运行时的 this 值,同时支持逐个传入参数。
基本语法和核心作用
调用形式是:func.call(thisArg, arg1, arg2, ...)。其中:
-
thisArg是你想让函数内部this指向的对象;如果传null或undefined,非严格模式下会自动转为全局对象(如浏览器中是window),严格模式下就保持null/undefined; -
arg1, arg2, ...是按顺序传给函数的实际参数,一一对应形参。
常见使用场景
比如借用其他对象的方法,或临时切换上下文:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 让数组方法处理类数组对象(如
arguments):Array.prototype.slice.call(arguments, 1); - 继承构造函数的属性:
Parent.call(this, name, age)在子构造函数中调用父构造函数; - 绑定事件回调时固定
this:btn.onclick = function() { handleClick.call(myObj, 'click') }。
和 apply、bind 的区别
三者都可改 this,但行为不同:
立即学习“Java免费学习笔记(深入)”;
-
call:立即执行,参数逐个列出; -
apply:立即执行,参数以数组形式传入; -
bind:不执行,返回一个新函数,this和部分参数被预先绑定。
注意点
函数必须是可调用的(不是 undefined 或原始值),否则会报错;call 不修改原函数,只影响当次调用的 this 和参数。

















