如何拦截 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())
我知道如何使用以下代码在代理中拦截 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())