Это экспериментальная технология, часть предложения Harmony (ECMAScript 7).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.
Сводка
Метод Array.observe() используется для асинхронного обзора изменений в массивах, подобно тому, как метод Object.observe() используется для тех же целей для объектов. Он предоставляет поток изменений в порядке их возникновения.
Синтаксис
Array.observe(arr, callback)
Параметры
arr- Обозреваемый массив.
callback-
Функция, вызываемая на каждое сделанное изменение со следующими аргументами:
changes-
Массив объектов, каждый из которых представляет одно изменение. Эти объекты обладают следующими свойствами:
name: название изменённого свойства.object: изменённый массив, после применения этого изменения.type: строка, указывающая тип произошедшего изменения. Может быть одной из"add","update","delete"или"splice".oldValue: только для типов"update"и"delete". Значение до изменения.index: только для типа"splice". Индекс, по которому произошло изменение.removed: только для типа"splice". Массив с удалёнными элементами.addedCount: только для типа"splice". Количество добавленных элементов.
Описание
Функция callback вызывается каждый раз, когда с массивом arr происходят какие-либо изменения. Параметром в неё передаётся массив со всеми произошедшими изменениями в порядке их возникновения.
Изменения через методы объекта Array, например, посредством метода Array.prototype.pop(), будут зарегистрированы как изменения типа "splice". Присваивание по индексу, в результате которого размер массива не изменится, может быть зарегистрировано, как изменение типа "update".
Примеры
Пример: журналирование всех трёх типов событий
var arr = ['a', 'b', 'c'];
Array.observe(arr, function(changes) {
console.log(changes);
});
arr[1] = 'B';
// [{type: 'update', object: <arr>, name: '1', oldValue: 'b'}]
arr[3] = 'd';
// [{type: 'splice', object: <arr>, index: 3, removed: [], addedCount: 1}]
arr.splice(1, 2, 'beta', 'gamma', 'delta');
// [{type: 'splice', object: <arr>, index: 1, removed: ['B', 'c', 'd'], addedCount: 3}]
Спецификации
Черновое предложение к обсуждению для ECMAScript 7.
Совместимость с браузерами
| Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Базовая поддержка | 36 | Нет | Нет | Нет | Нет |
| Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Базовая поддержка | Нет | (Да) | Нет | Нет | Нет | Нет |