| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Functions/get | [Back] [Original] |
Get to know MDN better
Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.
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.
{get prop() { ... } }
{get [expression]() { ... } }
propO nome da propriedade qual a funo dada ser associada.
A partir do ECMAScript 6, voc pode tambm utilizar expresses para um nome computado de uma propriedade para associar funo dada.
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:
{ get x() { }, get x() { } } and { x: ..., get x() { } } so 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 no 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 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 (que 1)
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.
var expr = "foo";
var obj = {
get [expr]() {
return "bar";
},
};
console.log(obj.foo); // "bar"
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:
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.
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().
| Specification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-method-definitions |
deleteObject.defineProperty()Object.prototype.__defineGetter__()Object.prototype.__defineSetter__()This page was last modified on 17 de dez. de 2024 by MDN contributors.
Your blueprint for a better internet.
Portions of this content are 19982026 by individual mozilla.org contributors. Content available under a Creative Commons license.
| Web Proxy Viewer | New URL | Original Page |