Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnologia Web para desenvolvedores
  2. JavaScript
  3. Referência JavaScript
  4. Funções
  5. getter

Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.

View in EnglishAlways switch to English

getter

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨julho de 2015⁩.

A sintaxe deget associa uma propriedade de um objeto a uma função que será chamada quando tal propriedade é acessada.

Sintaxe

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

Parâmetros

prop

O nome da propriedade à qual a função dada será associada.

expression

A partir do ECMAScript 6, você pode também utilizar expressões para um nome computado de uma propriedade para associar à função dada.

Descrição

Às vezes é desejável que se permita acesso a uma propriedade que retorna um valor computado dinamicamente, ou você pode querer refletir o status de uma variável interna sem requerer o uso de chamadas de método explícitas. Em Javascript, isso pode ser feito com o uso de umgetter. Não é possível simultaneamente ter um getter associado a uma propriedade e a mesma possuir um valor, embora seja possível usar um getter e um setter em conjunto para criar algo como uma pseudo-propriedade.

Note o seguinte quando for trabalhar com a sintaxeget:

Um getter pode ser removido usando o operadordelete.

Exemplos

Definindo um getter em novos objetos em inicializadores de objetos

O exemplo abaixo irá criar a pseudo-propriedadelatest para o objetoobj, que irá retornar o último item do array emlog.

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 alatest não irá alterá-la.

Removendo um getter usando o operadordelete

Se você quer remover um getter, você pode apenas utilizardelete.

js
delete obj.latest;

Definindo um getter em objetos existentes usandodefineProperty

Para adicionar um getter a um objeto existente a qualquer momento, useObject.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 são uma tecnologia experimenta, parte da proposta do ECMAScript 6 e não é amplamente suportada pelos navegadores ainda. O exemplo abaixo irá disparar umSyntaxError 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 dão uma maneira de definir uma propriedade de um objeto, mas eles não calculam o valor da propriedade até que sejam acessados. Um getter adia o custo de cálculo do valor até que o valor seja necessário e, se nunca o for, você não precisa pagar esse custo.

Uma técnica de otimização adicional para atrasar o cálculo do valor de uma propriedade e cacheá-lo para acesso futuro são ossmart oumemoized getters. O valor é calculado na primeira vez que o getter é invocado, sendo então cacheado para que acessos subsequentes retornem o valor em cache sem recalculá-lo. Isso é util nas seguintes situações:

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

Isso significa que você não 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 própria (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 também o código do módulo XPCOMUtils.jsm, que define a funçãodefineLazyGetter().

Especificações

Specification
ECMAScript® 2026 Language Specification
# sec-method-definitions

Compatibilidade com navegadores

Veja também

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp