javascript - 如何在 JS 代理中拦截排序功能?

标签 javascript node.js javascript-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())

关于javascript - 如何在 JS 代理中拦截排序功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69552687/

相关文章:

javascript - 是否可以代理原语(字符串、数字)?

node.js - 如何从外部模型引用 Mongoose 数据库?

css - 为什么 Bootstrap 主题没有在 nodejs 上使用 https 模块上传?

node.js - 使用 Node.js 进行条件二进制解包

javascript - D3.js -- 序数刻度(版本 3 到版本 4)

javascript - 仅使用 JavaScript 代理将偶数添加到数组

javascript - 对象、构造函数和方法之间的关系

javascript - 将 setTimeout 与 AJAX 请求一起使用时出错

javascript - 水平显示内容,但在屏幕宽度不允许时堆叠