Array.observe()
Сводка
Метод 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}]
Спецификации
Совместимость с браузерами
We're converting our compatibility data into a machine-readable JSON format.
This compatibility table still uses the old format,
because we haven't yet converted the data it contains.
Find out how you can help!
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | 36 | Нет | Нет | Нет | Нет |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | Нет | (Да) | Нет | Нет | Нет | Нет |