我想知道任意对象的某些属性何时发生变化。
我读到了这个问题的答案:“extend setter default object”这似乎暗示了使用getter和setter的解决方案。但是,我尝试使用它来捕获对DOM对象的id
和style
属性的更改,但它不起作用。我观察到的一个奇怪的事情是,一旦我为id
字段创建了一个setter,原始id
字段就会消失,因此尝试读取或写入该值会失败。由于属性可能是DOM属性,有时不是简单的变量,我不能简单地创建自己的变量,因为我不能随意重新创建生成值的任何底层功能。
我真正想做的就是检测属性何时发生变化,并透明地传递更改。
进一步的研究使我进入了这个页面presenting a polyfill for Object.watch。但是,虽然这个监视功能似乎让我看到对象属性何时发生变化,但实际属性最终没有改变。
答案 0 :(得分:0)
您可以使用mutation observers来观察属性的变化。这适用于获取/设置标记属性的DOM属性。与突变事件相比,突变观察者在实际突变后很长时间内运行,而不是立即。我读过变异观察者比突变事件表现更好。
您还会提到重新定义属性时如何访问原始getter / setter的问题。如果您使用变异观察器解决方案,您将不必担心这一点。在某些浏览器(如Firefox)中,id
等属性的原始功能也实现为getter / setter。例如,如果您运行Object.getOwnPropertyDescriptor(Element.prototype, 'id').set.call(myElement, 'asdf')
,就会myElement.id = 'asdf'
,即使重新定义myElement.id
也是如此。有些浏览器不这样做。例如,Chromium在实现Web IDL still working时this aspect。