Skip to content

Instantly share code, notes, and snippets.

@ipanardian
Created December 22, 2017 07:06
Show Gist options
  • Save ipanardian/22d4d35e0d0994446937113ad7df1c87 to your computer and use it in GitHub Desktop.
Save ipanardian/22d4d35e0d0994446937113ad7df1c87 to your computer and use it in GitHub Desktop.
Watch Object Changes with Proxy API
'use strict';
function onChange(object, onChange) {
const handler = {
get(target, property, receiver) {
try {
return new Proxy(target[property], handler);
} catch (err) {
return Reflect.get(target, property, receiver);
}
},
defineProperty(target, property, descriptor) {
onChange();
return Reflect.defineProperty(target, property, descriptor);
},
deleteProperty(target, property) {
onChange();
return Reflect.deleteProperty(target, property);
}
};
return new Proxy(object, handler);
};
let x = {
a: 1
};
let y = onChange(x, () => console.log(x)); //{a: 1}
y.a = 2
console.log(x.a) //a == 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment