Skip to content

Instantly share code, notes, and snippets.

@AaronFlower
Created November 30, 2017 15:47
Show Gist options
  • Save AaronFlower/ff2385d05b85fa4a8bdf09aaf4da8f63 to your computer and use it in GitHub Desktop.
Save AaronFlower/ff2385d05b85fa4a8bdf09aaf4da8f63 to your computer and use it in GitHub Desktop.
javascript Proxy Reflect
/**
* Use Proxy to implement observable
*/
function observable (obj, onchange) {
return new Proxy(obj, {
set (target, key, value) {
Reflect.set(target, key, value)
onchange(key, value)
},
delete (target, key) {
Reflect.delete(target, key)
onchange(key, undefined)
}
})
}
let p = {
name: 'aaron',
age: 20
}
pp = observable(p, (key, value) => {
console.log('proxy on change:', key, value)
})
pp.name = 'Aaron'
pp.age = 20
delete pp.age
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment