Это экспериментальная технология, часть предложения 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 |
---|---|---|---|---|---|---|
Базовая поддержка | Нет | (Да) | Нет | Нет | Нет | Нет |