call方法用于显式指定函数执行时的this值并立即调用,语法为func.call(thisarg, arg1, arg2, ...),支持逐个传参,可借用数组方法或实现构造函数继承。

call 方法用于显式指定函数执行时的 this 值,并立即调用该函数,同时支持逐个传入参数。
基本语法和核心作用
调用形式为:func.call(thisArg, arg1, arg2, ...)。
其中 thisArg 是函数内部 this 将指向的对象;后续参数是传递给函数的实际参数,按顺序一一对应。
改变 this 指向并立即执行
当函数依赖特定上下文(比如对象属性方法)但被单独调用时,this 会丢失。用 call 可手动绑定:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 若不传
thisArg或传null/undefined,非严格模式下this指向全局对象(如window),严格模式下为undefined - 传入一个对象,函数体内
this就指向该对象 - 函数立刻执行,不像
bind那样返回新函数
传参方式:逐个列出,不支持数组直接展开
call 的参数从第二个开始,每个都是独立实参:
- 正确写法:
fn.call(obj, 'a', 2, true) - 如果手头是一个参数数组,需用扩展运算符转成逗号分隔:
fn.call(obj, ...args) - 不能直接写
fn.call(obj, args),否则整个数组会作为第一个参数传入
常见实用场景
例如借用数组方法处理类数组对象(如 arguments 或 NodeList):
-
Array.prototype.slice.call(arguments)→ 把arguments转成真数组 -
Array.prototype.push.call(arr, 1, 2, 3)→ 向arr推入多个值 - 模拟继承:
Parent.call(this, name)在子构造函数中复用父类初始化逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










