[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Functions/get [Back]  [Original]

getter - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

getter

Baseline Widely available

This feature is well established and works across many devices and browser versions. Its been available across browsers since julho de 2015.

A sintaxe de get associa uma propriedade de um objeto a uma funo que ser chamada quando tal propriedade acessada.

In this article

Sintaxe

{get prop() { ... } }
{get [expression]() { ... } }

Parmetros

prop

O nome da propriedade qual a funo dada ser associada.

expression

A partir do ECMAScript 6, voc pode tambm utilizar expresses para um nome computado de uma propriedade para associar funo dada.

Descrio

s vezes desejvel que se permita acesso a uma propriedade que retorna um valor computado dinamicamente, ou voc pode querer refletir o status de uma varivel interna sem requerer o uso de chamadas de mtodo explcitas. Em Javascript, isso pode ser feito com o uso de um getter. No possvel simultaneamente ter um getter associado a uma propriedade e a mesma possuir um valor, embora seja possvel usar um getter e um setter em conjunto para criar algo como uma pseudo-propriedade.

Note o seguinte quando for trabalhar com a sintaxe get:

Um getter pode ser removido usando o operador delete.

Exemplos

Definindo um getter em novos objetos em inicializadores de objetos

O exemplo abaixo ir criar a pseudo-propriedade latest para o objeto obj, que ir retornar o ltimo item do array em log.

js
var log = ["test"];
var obj = {
  get latest() {
    if (log.length == 0) return undefined;
    return log[log.length - 1];
  },
};
console.log(obj.latest); // Retornar "test".

Note que a tentativa de atribuir um valor a latest no ir alter-la.

Removendo um getter usando o operador delete

Se voc quer remover um getter, voc pode apenas utilizar delete.

js
delete obj.latest;

Definindo um getter em objetos existentes usando defineProperty

Para adicionar um getter a um objeto existente a qualquer momento, use Object.defineProperty().

js
var o = { a: 0 };

Object.defineProperty(o, "b", {
  get: function () {
    return this.a + 1;
  },
});

console.log(o.b); // Executa o getter, que retornar a + 1 (que  1)

Usando uma propriedade com nome computado

Nota: Propriedades com nome computado so uma tecnologia experimenta, parte da proposta do ECMAScript 6 e no amplamente suportada pelos navegadores ainda. O exemplo abaixo ir disparar um SyntaxError em ambientes sem suporte.

js
var expr = "foo";

var obj = {
  get [expr]() {
    return "bar";
  },
};

console.log(obj.foo); // "bar"

Smart / self-overwriting / lazy getters

Getters lhe do uma maneira de definir uma propriedade de um objeto, mas eles no calculam o valor da propriedade at que sejam acessados. Um getter adia o custo de clculo do valor at que o valor seja necessrio e, se nunca o for, voc no precisa pagar esse custo.

Uma tcnica de otimizao adicional para atrasar o clculo do valor de uma propriedade e cache-lo para acesso futuro so os smart ou memoized getters. O valor calculado na primeira vez que o getter invocado, sendo ento cacheado para que acessos subsequentes retornem o valor em cache sem recalcul-lo. Isso util nas seguintes situaes:

  • Se o clculo da propriedade caro (usa muita RAM ou CPU, cria um worker, retorna um arquivo remoto, etc).
  • Se o valor no necessrio agora. Ele ser utilizado depois ou, em alguns casos, nem mesmo o ser.
  • Se for utilizado, ele ser acessado diversas vezes e no h necessidade de recalcular um valor que nunca ser alterado, ou no deveria ser recalculado.

Isso significa que voc no deveria utilizar um lazy getter para uma propriedade cujo valor voc espera mudar, porque o getter nunca ir recalcular o valor.

No exemplo a seguir, o objeto tem um getter como uma propriedade prpria (own property). Ao tentar obter essa propriedade que foi removida, ela ser readicionada, mas implicitamente como uma propriedade comum desta vez. Finalmente, o valor ser retornado.

js
get notifier() {
  delete this.notifier;
  return this.notifier = document.getElementById("bookmarked-notification-anchor");
},

Para o Firefox, veja tambm o cdigo do mdulo XPCOMUtils.jsm, que define a funo defineLazyGetter().

Especificaes

Specification
ECMAScript 2027 LanguageSpecification
# sec-method-definitions

Compatibilidade com navegadores

Veja tambm


Web Proxy Viewer  |  New URL  |  Original Page