★ wanayoo — archive 1999 https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/WeakMapNouvelle recherche | Portail wanayoo
Your Search Results

    WeakMap

    This article is in need of an editorial review.

    This is an experimental technology, part of the Harmony (ECMAScript 6) proposal.
    Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future version of browsers as the spec changes.

    Sumário

    O objeto WeakMap é uma coleção de pares key/value no qual as chaves são objetos e os valores podem ser valores arbitrários.

    Sintaxe

    new WeakMap([iterable])
    

    Parâmetros

    iterable
    Iterable é um Array or outro objeto iterável o qual os elementos são pares key-value (Array de dois elementos). Cada para key-value serão adicionados ao novo Map.

    Descrição

    Por quê WeakMap?

    Um programador JavaScript experiente vai notar que esta API pode ser implementada em JavaScript com dois arrays (um para chaves, um para valores) compartilhado pelos 4 métodos da API. Tal implementação teria duas principais incoveniências. A primeira é uma busca O(n) (n sendo o número de chaves no map). A segunra é o problema de memory leak. Com maps escritos manualmente, o array de chaves guardaria referências para objetos chave, prevenindo-os de serem coletados pelo Garbage Collector. Nos WeakMaps nativos, referências aos objetos chave são segurados de modo "fraco", o que significa que eles não previnem a coleção pelo GC no caso de não haver nenhuma outra referência ao objeto. 

    Por causa das referências sendo fracas, chaves de WeakMap não são enumeráveis (não existe um método que dá a você uma lista de chaves, campeão :p). Se existisse tal método, a lista dependeria no estado da coleção do GC, introduzindo não-determinismo. Se você quiser ter uma lista de chaves, você deve manter para si mesmo. 

    Propriedades

    WeakMap.length
    O valor da propriedade length é 1.
    WeakMap.prototype
    Representa o prototype para o constructor WeakMap. Permite a adição de propriedades para todos os objetos WeakMap.

    Instâncias WeakMap

    Todas as instâncias WeakMap herdam de WeakMap.prototype.

    Propriedades

    WeakMap.prototype.constructor
    Retorna a função construtora das instâncias, neste caso a própria WeakMap.

    Métodos

    WeakMap.prototype.clear()
    Remove todos os pares chave/valor do objeto WeakMap
    WeakMap.prototype.delete(key)
    Remove qualquer valor associado à  key. WeakMap.prototype.has(key) e retorna false após.
    WeakMap.prototype.get(key)
    Retorna o valor associado a key, ou undefined se nenhum existir.
    WeakMap.prototype.has(key)
    Retorna um Boolean verificando se há algum valor associado a key no objeto WeakMap ou não.
    WeakMap.prototype.set(key, value)
    Configura um valor para key no objeto WeakMap. Retorna undefined.

    Exemplos

    Exemplo: Usando WeakMap

    var wm1 = new WeakMap(),
        wm2 = new WeakMap(),
        wm3 = new WeakMap();
    var o1 = {},
        o2 = function(){},
        o3 = window;
    
    wm1.set(o1, 37);
    wm1.set(o2, "azerty");
    wm2.set(o1, o2); // um valor pode ser qualquer coisa, incluindo um objeto or uma função
    wm2.set(o3, undefined);
    wm2.set(wm1, wm2); // chaves e valores pode ser quaisquer objetos. Até mesmo WeakMaps! :O
    
    wm1.get(o2); // "azerty"
    wm2.get(o2); // undefined, pois não existe valor para o2 em wm2 
    wm2.get(o3); // undefined, pois este é o valor definido
    
    wm1.has(o2); // true
    wm2.has(o2); // false
    wm2.has(o3); // true (mesmo se o valor armazenado for 'undefined')
    
    wm3.set(o1, 37);
    wm3.get(o1); // 37
    wm3.clear();
    wm3.get(o1); // undefined, pois wm3 foi 'limpado' e não há mais valor para o1.
    
    wm1.has(o1);   // true
    wm1.delete(o1);
    wm1.has(o1);   // false
    

    Especificações

    Especificações Status Comentário
    ECMAScript 6 (ECMA-262)
    The definition of 'WeakMap' in that specification.
    Draft Definição inicial.

    Compatibilidade com browsers

    Recurso Chrome Firefox (SpiderMonkey) Internet Explorer Opera Safari
    Suporte básico 36 6.0 (6.0) 11 Não suportado Não suportado
    clear() 36 20.0 (20.0) 11 Não suportado Não suportado
    Recurso Android Firefox Mobile (SpiderMonkey) IE Mobile Opera Mobile Safari Mobile
    Suporte básico 35 6.0 (6.0) Não suportado Não suportado Não suportado
    clear() 35 20.0 (20.0) Não suportado Não suportado Não suportado

    Veja também

    Document Tags and Contributors

    Contributors to this page: teoli, gabrielrubens
    Última atualização por: teoli,