reflect 本身没有 apply 方法,但可通过 reflect.apply(target, thisargument, argumentslist) 实现等价调用,它是 es6 标准方法,语义等价于 target.apply(thisargument, argumentslist),更函数式且安全。

JavaScript 中 Reflect 本身没有 apply 方法,它不提供类似 Function.prototype.apply() 的直接调用方式。但你可以通过 Reflect.apply() 来实现相同效果——即在指定的 this 上下文和参数列表中调用一个函数。
Reflect.apply() 是标准替代方案
Reflect.apply(target, thisArgument, argumentsList) 是 ES6 引入的规范方法,专门用于函数调用,语义等价于 target.apply(thisArgument, argumentsList),但更函数式、更安全(不会因 target 非函数而抛出 TypeError,而是直接报错)。
- target:要调用的函数(必须是可调用对象)
-
thisArgument:执行时绑定的
this值 -
argumentsList:必须是类数组或数组,如
[1, 2]或Array.from(arguments)
对比传统 apply 写法
以下两种写法行为一致:
Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。
const sum = (a, b) => a + b; const result = Reflect.apply(sum, null, [1, 2]); // 3✅ 传统方式:
const result = sum.apply(null, [1, 2]); // 3
常见使用场景
适用于需要动态调用函数、代理拦截、或统一抽象调用逻辑的场合:
- 在
Proxy的apply拦截器中转发调用 - 封装通用的函数执行工具(比如带超时、重试的调用器)
- 避免直接操作
Function.prototype.apply,提升代码可读性与类型安全性(尤其在 TypeScript 中)
注意点
Reflect.apply 不是对象方法,不能链式调用;它是一个顶层静态函数,调用时必须传齐三个参数。
- 如果
target不是函数,会立即抛出TypeError -
argumentsList不能为空(null或undefined会报错),至少传空数组[] - 不支持直接传入展开语法如
...args,需确保是数组形式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










