2014-12-25 6 views
0

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

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

Посмотрите на этот код:

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

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

+0

похоже, что вопрос не имеет ничего общего с какой-либо конкретной библиотекой, вы пытаетесь создать объект javascript и его конструктор вызывается в порядке или исполнении. –

ответ

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] 

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

+0

спасибо, есть ли способ получить его по заказу, по которому были изменены значения? или каким-то образом выяснить порядок? – DuduAlul

+0

Ну, что вы пытаетесь достичь именно? Зачем тебе это нужно? – plalx