对象.观察顺序

Object.observe order

本文关键字:顺序 观察 对象      更新时间:2023-09-26

我在节点v0.11.13上使用Object.observe()。

看起来无法预测要调用的观察回调的时间。 是错误还是功能?

看看这段代码:

function observe(obj,name){
    Object.observe(obj, function(o){
        console.log(name,o);
    });
    return obj;
}
var boo = observe({foo:1},'a');
var doo = observe({foo:1},'b');
doo.foo=2;
boo.foo=2;

输出如下所示:

a [ { type: 'update', object: { foo: 2 }, name: 'foo', oldValue: 1 } ]
b [ { type: 'update', object: { foo: 2 }, name: 'foo', oldValue: 1 } ]

我期待相反的顺序。我想知道这是否与此功能的规范或节点 impl' 有关。

它似乎遵循观察者注册的顺序,而不是值更改的顺序。

var doo = observe({foo:1},'a');
var boo = observe({foo:1},'b');
var zoo = observe({foo:1},'c');
var too = observe({foo:1},'d');
zoo.foo = 2;
too.foo = 2;
doo.foo= 2;
boo.foo= 2;
a [Object]
b [Object]
c [Object]
d [Object]

这是有道理的,因为在同步运行到执行堆栈处理期间对同一对象的多个更改将一起批处理。