Javascript 观察现有对象上的对象属性更改
以前可以调用任何对象,然后在修改属性时接收回调。然而,它被弃用了,我们被给予和作为替代品。但两者都不允许将侦听器附加到现有对象,对该对象的引用已存储在其他位置。以该代码为例:Javascript 观察现有对象上的对象属性更改,javascript,Javascript,以前可以调用任何对象,然后在修改属性时接收回调。然而,它被弃用了,我们被给予和作为替代品。但两者都不允许将侦听器附加到现有对象,对该对象的引用已存储在其他位置。以该代码为例: const state = {}; /* BEGIN Third party code */ (function runProcessing() { setInterval(globalState => { if (Math.random() > 0.5) {
const state = {};
/* BEGIN Third party code */
(function runProcessing() {
setInterval(globalState => {
if (Math.random() > 0.5) {
globalState.attr = !globalState.attr;
}
}, 1000, state);
})();
/* END Third party code */
// TODO: run some function every time state.attr is changed
有两个紧迫的问题:
状态声明为常量,因此无法使用代理重新定义
状态是通过引用传递给内部函数的,因此即使状态被重新定义,函数也将继续使用原始对象
虽然可以使用setInterval不断地将state.attr与其自身的早期版本进行比较,但它无法捕获在setInterval调用之间发生的更改,并且总是有延迟
是否有任何鲜为人知的方法可以实现这一点?使用resp。在现有对象上创建getter和setter 使用Object.defineProperties resp。Object.defineProperty可在现有对象上创建getter和setter@康奈索,这正是我想要的。