问题很简单,但对于Object.observe的当前实现来说这似乎是不可能的。想象一下:
var obj = { foo: 1 }
Object.observe(obj, function (changes) {
console.log(changes)
})
obj.foo = 2
这将按预期记录一个对象,其中包含我所做的更改。所以问题是如何在没有这种副作用的情况下更改属性?
答案 0 :(得分:0)
那么,Object.observe设计的目标之一就是随时捕捉对象的所有变化。
答案取决于您的实际需要。例如,下面的代码不会导致对象发生更改事件:
var obj = { foo: [1] }
Object.observe(obj, function (changes) {
console.log(changes)
})
obj.foo[0] = 2
技术上对象本身不会改变。
可能的选择之一是提供您自己的修补Object.observe实现,该实现仅在某些标志打开时才通知观察者。
或者使用一些更高级别的习惯用语,例如pubsub机制,您可以管理“更改”事件的排放。