【问题标题】:How to change value of an observed object without triggering it's observers如何在不触发观察者的情况下更改观察对象的值
【发布时间】:2016-02-11 14:40:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: object.observe


    【解决方案1】:

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

    答案取决于您的实际需求。例如,下面的代码不会在对象上引起更改事件:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 1970-01-01
      • 2015-12-16
      • 2015-12-30
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多