Объект. соблюдать порядок

Я использую Object.observe() на узле v0.11.13.

Похоже, что время вызова обратного вызова наблюдения невозможно предсказать. это баг или фича?

Взгляните на этот код:

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 } ]

Я ожидал обратного порядка. Интересно, связано ли это со спецификацией или узлом реализации этой функции.


person DuduAlul    schedule 25.12.2014    source источник
comment
похоже, вопрос не имеет ничего общего с какой-либо конкретной библиотекой, вы пытаетесь создать объект javascript, и его конструктор вызывается по порядку или выполнению.   -  person Anshul Nigam    schedule 25.12.2014


Ответы (1)


Похоже, он следует порядку регистрации наблюдателей, а не порядку изменения значений.

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]

Это имеет смысл, потому что множественные изменения одного и того же объекта во время синхронного выполнения через обработку стека выполнения будут объединены в пакет.

person plalx    schedule 25.12.2014
comment
спасибо, есть ли способ получить его по порядку, в котором значения были изменены? или как-то выяснить порядок? - person DuduAlul; 27.12.2014
comment
Ну, чего именно ты пытаешься добиться? зачем вам это? - person plalx; 27.12.2014