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@康奈索,这正是我想要的。