Search code examples
javascriptecmascript-6es6-proxy

Proxy Getting RangeError


I am trying to intercept get and set operations using proxies. Setting works perfectly, but getting triggers "RangeError: Maximum call stack size exceeded" in an infinite loop. I am trying to simply log during the interception and return the default behavior.

Working:

testobject = {}
testobject = new Proxy(testobject, {
 set(target, property, value, receiver) {
  console.log("setting", target, property, value, receiver)
  return(Reflect.set(target, property, value, receiver))
 }
})
testobject.done = true
console.log(testobject.done)

Broken:

testobject = {}
testobject = new Proxy(testobject, {
 get(target, property, receiver) {
  console.log("getting", target, property, receiver)
  return(Reflect.get(target, property, receiver))
 },
 set(target, property, value, receiver) {
  console.log("setting", target, property, value, receiver)
  return(Reflect.set(target, property, value, receiver))
 }
})
testobject.done = true
console.log(testobject.done)


Solution

  • I fixed this by removing the receiver paramters.

    testobject = {}
    testobject = new Proxy(testobject, {
     get(target, property) {
      console.log("getting", target, property)
      return(Reflect.get(target, property))
     },
     set(target, property, value) {
      console.log("setting", target, property, value)
      return(Reflect.set(target, property, value))
     }
    })
    testobject.done = true
    console.log(testobject.done)