proxy 的 apply 拦截器用于捕获函数调用,接收 target(原始函数)、thisarg(this 值)和 argumentslist(参数数组)三个参数;建议用 reflect.apply 转发调用,并可安全读取、校验或修改参数列表。

JavaScript 中 Proxy 通过 apply 拦截器来捕获函数调用及其参数列表,核心在于 handler 对象中定义 apply(target, thisArg, argumentsList) 方法。
apply 拦截器的三个关键参数
当你对一个被 Proxy 包裹的函数执行调用(如 proxy(1, 'a', true))时,apply 会被触发:
- target:原始函数对象,必须是可调用的函数,否则 Proxy 构造会报错;
-
thisArg:调用时绑定的
this值,可能是显式传入的(如proxy.call(ctx, ...)),也可能是默认绑定; -
argumentsList:实际传入的参数构成的类数组对象(通常是真正的
Array),它就是你要拦截和操作的“参数列表”。
如何安全读取和处理参数列表
参数列表不是字符串,而是可遍历、可修改的数组(或类数组)。建议用 Reflect.apply 转发调用,保证行为一致:
- 直接访问:
console.log(argumentsList);或argumentsList[0]、argumentsList.length; - 类型检查:
Array.isArray(argumentsList)通常为true; - 修改后转发:
return Reflect.apply(target, thisArg, [...argumentsList, 'extra'])可追加参数; - 校验示例:若要求至少两个数字参数,可写
if (argumentsList.length
常见误用提醒
注意几个边界情况:
- 不能用
arguments对象 —— 它在apply回调里不可用,只属于普通函数内部; - 箭头函数无
arguments,但argumentsList仍正常传入; - 如果想拦截
call或apply本身调用,它们也走apply拦截器,thisArg和argumentsList会如实反映传入值; - 必须显式返回结果,否则函数调用返回
undefined。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











