Это экспериментальная технология, часть предложения Harmony (ECMAScript 7).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.
Сводка
Метод Object.observe() используется для асинхронного обзора изменений в объекте. Он предоставляет поток изменений в порядке их возникновения.
Синтаксис
Object.observe(obj, callback)
Параметры
obj- Обозреваемый объект.
callback- Функция, вызываемая при возникновении изменений в объекте, принимает следующий аргумент:
changes- Массив объектов, представляющих одно изменение. Объекты с изменениями содержат следующие свойства:
name: имя изменённого свойства.object: изменённый объект после изменения.type: строка, указывающая тип произошедшего изменения. Может принимать одно из значений:"add","update"или"delete".oldValue: только для типов"update"и"delete". Значение до изменения.
Описание
Функция callback вызывается каждый раз при возникновении изменений в объекте obj с массивом всех изменений в порядке их возникновения.
Примеры
Пример: журналирование всех трёх типов изменений
var obj = {
foo: 0,
bar: 1
};
Object.observe(obj, function(changes) {
console.log(changes);
});
obj.baz = 2;
// [{name: 'baz', object: <obj>, type: 'add'}]
obj.foo = 'hello';
// [{name: 'foo', object: <obj>, type: 'update', oldValue: 0}]
delete obj.baz;
// [{name: 'baz', object: <obj>, type: 'delete', oldValue: 2}]
Пример: привязка данных
// Пользовательская модель
var user = {
id: 0,
name: 'Брендан Айк',
title: 'М-р.'
};
// Создаёт приветствие для пользователя
function updateGreeting() {
user.greeting = 'Здравствуйте, ' + user.title + ' ' + user.name + '!';
}
updateGreeting();
Object.observe(user, function(changes) {
changes.forEach(function(change) {
// Любое изменение имени или обращения обновит привествие
if (change.name === 'name' || change.name === 'title') {
updateGreeting();
}
});
});
Спецификации
Черновое предложение к обсуждению для ECMAScript 7.
Совместимость с браузерами
| Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Базовая поддержка | 36 | Нет | Нет | 23 | Нет |
| Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Базовая поддержка | Нет | 36 | Нет | Нет | 23 | Нет |