过去可以调用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
	提交
		取消
	