Skip to content

Instantly share code, notes, and snippets.

@inodaf
Last active June 24, 2020 20:05
Show Gist options
  • Save inodaf/39b620ae30f06b96a801fbb1a2e19b34 to your computer and use it in GitHub Desktop.
Save inodaf/39b620ae30f06b96a801fbb1a2e19b34 to your computer and use it in GitHub Desktop.
πŸ‘€ Object Observable using ES6 Proxies.
function createObservable(observable, { onGet, onSet }) {
const interceptor = {
get(target, key, receiver) {
onGet(key)
return target[key]
},
set(target, prop, value) {
onSet(prop, value)
return true
}
}
return new Proxy(observable, interceptor)
}

Reacting to Object's get and set behaviour.

const Observable = createObservable({ a: '1', b: '2' }, {
  onGet(key) {
    console.log('Getting key:', key)
  },
  onSet(target, value) {
    console.log('Updating value:', value, 'for', target, 'prop')
  }
})
Observable.a // -> 'Getting key: `a`'
Observable.b = 'Hello proxies' // -> 'Updating value: `Hello proxies` for `b` prop'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment