1

这个问题很简单,但对于 Object.observe 的当前实现来说,这似乎是不可能的。想象 :

var obj = { foo: 1 }
Object.observe(obj, function (changes) {
    console.log(changes)
})
obj.foo = 2

正如预期的那样,这将记录一个包含我所做更改的对象。所以问题是如何在没有这种副作用的情况下更改属性?

4

1 回答 1

0

嗯,Object.observe 设计的目标之一是随时捕捉对象的所有变化。

答案取决于您实际需要什么。例如,下面的代码不会导致对象上的更改事件:

var obj = { foo: [1] }
Object.observe(obj, function (changes) {
    console.log(changes)
})
obj.foo[0] = 2

从技术上讲,对象本身不会改变。

一种可能的选择是提供您自己的、已修补的 Object.observe 实现,该实现将仅在某些标志打开时通知观察者。

或者,使用一些更高级别的惯用语,例如 pubsub 机制,您可以在其中管理“更改”事件的排放。

于 2015-11-10T16:56:53.400 回答