如何拦截 JS 代理中的排序功能?

How do I intercept sort function within a JS proxy?

我知道如何使用以下代码在代理中拦截 get`set` 等:

function get( target, prop, receiver ) {
  console.log("Intercepted get")
  return Reflect.get( target, prop, receiver );
}
var handler = {
  'get': get
};
var proxy = new Proxy( new Array(...[7, 1,2,3,4,5]), handler );

我无法复制这个进行排序。添加:

function sort(target, prop) {
  console.log("Intercepted sort")
  return Reflect.sort(target);
}
var handler = {
  'get': get,
  'sort': sort
};

无效。我也一直找不到文档。如何拦截sort函数?

您必须使用 get 来捕获方法。 get 为每个 属性 和读取的每个方法调用。 属性 或方法的名称作为第二个参数传递给 get prop:

function sort() {
  console.log("Intercepted sort")
  return this.sort();
}
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( new Array(...[7,1,2,3,4,5]), handler );
console.log(proxy.sort())