2015-11-10 46 views
1

这个问题非常简单,但对于Object.observe的当前实现来说,这似乎是不可能的。想象一下:如何在不触发观察者的情况下更改观察对象的值

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

这将记录一个对象,并按我的预期进行更改。所以问题是如何改变财产没有这种副作用?

回答

0

那么,Object.observe设计的目标之一就是随时捕捉对象的所有更改。

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

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

由于技术上的对象本身不会改变。

其中一种可能的选择是提供自己的修补Object.observe实现,只有当某个标志打开时才会通知观察者。

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