From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../javascript/reference/functions/get/index.html | 217 +++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 files/pt-br/web/javascript/reference/functions/get/index.html (limited to 'files/pt-br/web/javascript/reference/functions/get') diff --git a/files/pt-br/web/javascript/reference/functions/get/index.html b/files/pt-br/web/javascript/reference/functions/get/index.html new file mode 100644 index 0000000000..753f16dab0 --- /dev/null +++ b/files/pt-br/web/javascript/reference/functions/get/index.html @@ -0,0 +1,217 @@ +--- +title: getter +slug: Web/JavaScript/Reference/Functions/get +translation_of: Web/JavaScript/Reference/Functions/get +--- +
{{jsSidebar("Functions")}}
+ +
A sintaxe de get 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 um getter. 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 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.

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

+ +

Removendo um getter usando o operador delete

+ +

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

+ +
delete obj.latest;
+
+ +

Definindo um getter em objetos existentes usando defineProperty

+ +

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

+ +
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 (which is 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 um SyntaxError em ambientes sem suporte.

+
+ +
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 os smart ou memoized 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:

+ + + +

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.

+ +
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ção defineLazyGetter().

+ +

Especificações

+ + + + + + + + + + + + + + + + + + + + + + + + +
EspecificaçãoStatusComentário
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Definição inicial.
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES6')}}Adicionado nomes de propriedades computadas.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilidade com navegadores

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Suporte básico{{CompatChrome(1)}}{{ CompatGeckoDesktop("1.8.1") }}{{ CompatIE(9) }}9.53
Propriedades com nome computado{{CompatNo}}{{ CompatGeckoDesktop("34") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Suporte básico{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{ CompatGeckoMobile("1.8.1") }}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
Propriedades com nome computado{{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile("34.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Veja também

+ + -- cgit v1.2.3-54-g00ecf