MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Object.observe()

Это экспериментальная технология, часть предложения 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
Базовая поддержка Нет Нет Нет 23 Нет
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка Нет 36 Нет Нет 23 Нет

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: InoY, Mingun
 Обновлялась последний раз: InoY,