如何在JS代理中拦截排序函数



我知道如何使用以下代码在代理中拦截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。属性或方法的名称作为第二个参数prop:传递到get

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())

最新更新