Non-standard
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
O método Array.observe()
é usado para observar mudanças de forma assíncrona em Arrays, de forma similar ao método Object.observe()
para objetos. O método fornece um conjunto de mudanças em ordem de ocorrência. É equivalente ao método Object.observe()
invocado com a lista aceita ["add", "update", "delete", "splice"]
.
Sintaxe
Array.observe(arr, callback)
Parâmetros
arr
- O array a ser observado.
callback
- A função chamado cada vez que ocorrem mudanças, com o seguinte argumento:
changes
- Um array de objetos, sendo que cada um representa uma mudança. As propriedades destes objetos são:
name
: O nome da propriedade que mudou.object
: O array modificado depois que a mudança ocorreu.type
: Uma string que indica o tipo de mudança que ocorreu. Pode ser"add"
,"update"
,"delete"
, ou"splice"
.oldValue
: Apenas para os tipos"update"
e"delete"
. O valor antes da mudança.index
: Apenas para o tipo"splice"
. O índice no qual ocorreu a mudança.removed
: Apenas para o tipo"splice"
. Um array de elementos removidos.addedCount
: Apenas para o tipo"splice"
. O número de elementos adicionados.
Descrição
A função callback
é chamada cada vez que uma mudança é feita em arr
, com um array de todas as mudanças na ordem em que elas ocorreram.
Mudanças feitas via métodos de Array, tais como Array.prototype.pop()
serão reportados como mudanças do tipo "splice"
. Mudanças do tipo índice que não alteram o tamanho do array podem ser reportadas como mudanças do tipo "update"
.
Exemplos
Adicionando diferentes tipos em log
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}]
Especificações
Strawman proposal specification.
Compatibilidade com Browser
Funcionalidade | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Suporte básico | 36 | Não suportado | Não suportado | Não suportado | Não suportado |
Funcionalidade | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Suporte básico | Não suportado | (Yes) | Não suportado | Não suportado | Não suportado | Não suportado |