You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JS Proxy中拦截接收自定义函数参数的sort方法

实现逻辑说明

get 陷阱仅在读取 proxy.sort 属性时触发,此时并未执行 sort 方法,无法在 get 中捕获调用时传入的参数。所有调用 sort 方法时传入的参数,都会直接传递给 get 陷阱返回的自定义拦截函数,直接在拦截函数的参数位接收即可。

可运行验证代码

你现有代码的参数接收逻辑已经正确,补充参数处理逻辑即可正常使用:

// 拦截函数的参数位直接接收调用时传入的自定义排序函数
function sort(customSort) {
  console.log("Intercepted sort")
  // 此处可对捕获到的customSort做任意自定义处理
  console.log("已捕获自定义排序函数", customSort)
  // 调用原数组原生sort方法,传入排序函数
  return this.sort(customSort);
}
function get( target, prop, receiver ) {
  if (prop === 'sort') {
    // 仅绑定原数组为执行上下文,无需额外处理参数
    return sort.bind(target);
  }
  console.log("Intercepted get")
  return Reflect.get( target, prop, receiver );
}
var handler = {
  get
};
var proxy = new Proxy( [7,1,2,3,4,5], handler );

// 测试调用:传入倒序排序逻辑
console.log(proxy.sort((a,b) => b-a))

运行后会依次输出拦截日志、捕获到的自定义排序函数、排序后的数组[7,5,4,3,2,1]。

兼容多参数场景

如果需要适配sort方法的所有调用场景,可以用剩余参数语法接收所有传入参数:

function sort(...args) {
  console.log("捕获到sort调用的所有参数", args)
  return this.sort(...args);
}

内容的提问来源于stack exchange,提问作者Blue Granny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:54:03