--- title: getter slug: Web/JavaScript/Reference/Functions/get translation_of: Web/JavaScript/Reference/Functions/get ---
{get prop() { ... } }
{get [expression]() { ... } }
propÀ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:
{ get x() { }, get x() { } } and { x: ..., get x() { } } são proibidos).Um getter pode ser removido usando o operador delete.
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.
deleteSe você quer remover um getter, você pode apenas utilizar delete.
delete obj.latest;
definePropertyPara 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)
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"
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ção | Status | Comentá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')}} |
{{CompatibilityTable}}
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Suporte básico | {{CompatChrome(1)}} | {{ CompatGeckoDesktop("1.8.1") }} | {{ CompatIE(9) }} | 9.5 | 3 |
| Propriedades com nome computado | {{CompatNo}} | {{ CompatGeckoDesktop("34") }} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari 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}} |