过去可以调用Object.observe()任何对象,然后在修改属性时接收回调。但是,它已被弃用,我们获得了代理、getter 和 setter作为替代方案。但都不允许将侦听器附加到现有对象,该对象的引用已存储在其他地方。以这段代码为例: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有两个直接的问题:state被声明为 a const,因此不能使用 Proxy 重新定义state通过引用传递给内部函数,因此即使state重新定义,该函数仍将继续使用原始对象虽然这可以通过setInterval不断地将其state.attr与之前版本的自身进行比较来实现,但它无法捕捉到setInterval调用之间发生的变化,并且总是会有滞后。是否有任何鲜为人知的方法可以实现这一目标?
1 回答

Cats萌萌
TA贡献1805条经验 获得超9个赞
Object.defineProperties
分别使用 Object.defineProperty
在现有对象上创建 getter 和 setter。
添加回答
举报
0/150
提交
取消