Refference with Proxies

by João Vitor Scheuermann

JavaScript

function reference(obj) {
  function isObject(toValidate) {
    return typeof toValidate === 'object'
  }

  for (let key in obj) {
    if (isObject(obj[key])) obj[key] = reference(obj[key])
  }

  return new Proxy(obj, {
    get(target, prop, receiver) {
      if (prop in target) return target[prop]
      else return undefined
    },
    set(target, prop, value) {
      if (prop in target) target[prop] = value
      else {
        if (isObject(value)) target[prop] = reference(value)
        else target[prop] = value
      }
    }
  })
}

let data = {
  creative: {
    active: {}
  }
}

let teste = reference(data)
teste.batata = [['lalalalalaa']]

console.log(JSON.stringify(data))