0

My previous related question: How do I intercept sort function within a JS proxy?

Given the proxy:

function sort(customSort) {
  /* Write logs */
  console.log("Intercepted sort")
  return this.sort(customSort);
}
function get( target, prop, receiver ) {
  if (prop === 'sort') {
    /* How to capture custom 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 );

But now I add a custom sort function:

console.log(proxy.sort((a,b) => .... /* e.g., a-b */))

I cannot understand how to capture the function as to pass it to the proxy sort function. I've tried capturing different arguments in the get function, but can't find the correct one.

8
  • Don't you just need function sort() -> function sort(a, b)? I'm not sure what the proxy has to do with this here. Commented Oct 21, 2021 at 6:55
  • The proxy I have implemented does some other work as well, that's why I need to proxy Commented Oct 21, 2021 at 6:56
  • You need it to do what? I cannot understand what your expectation is here. What are you trying to do? Commented Oct 21, 2021 at 7:00
  • The sort function within the proxy does some other work as well, e.g., writes logs. I then need to apply the same sort that the user was trying to do. I.e., the user needs to be oblivious to the proxy. Commented Oct 21, 2021 at 7:01
  • 1
    maybe this helps: stackoverflow.com/questions/62849907/… Commented Oct 21, 2021 at 8:23

1 Answer 1

0

The solution was similar to: How to sort only part of array? between given indexes

I return a function that accesses argument[0]

function sort(customSort) {
  /* Write logs */
  console.log("Intercepted sort")
  return this.sort(customSort);
}
function get( target, prop, receiver ) {
  if (prop === 'sort') {
    /* How to capture custom sort?*/
     return function(customSort) => {
       return this.sort(customSort || ((a,b) => a-b) )
     }
  }
  console.log("Intercepted get")
  return Reflect.get( target, prop, receiver );
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.