| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Functions/get | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
La syntaxe get permet de lier une proprit d'un objet une fonction qui sera appele lorsqu'on accdera la proprit.
const obj = {
log: ["a", "b", "c"],
get latest() {
return this.log[this.log.length - 1];
},
};
console.log(obj.latest);
// Expected output: "c"
{get prop() { ... } }
{get [expression]() { ... } }
propLe nom de la proprit lier la fonction.
expressionAvec ECMAScript 2015, il est galement possible d'utiliser des expressions renvoyant un nom de proprit calcul pour le lier une fonction.
Il est parfois utile de crer une proprit qui renvoie une valeur dynamique calcule, ou de ne pas avoir recours l'appel explicite d'une mthode pour renvoyer le statut d'une variable interne. En JavaScript, il est possible de faire cela en utilisant un accesseur. Il n'est pas possible d'avoir simultanment un accesseur assimil une proprit et d'avoir cette proprit initialise une valeur, mais il est possible d'utiliser un accesseur et un mutateur pour crer une sorte de pseudo-proprit.
On notera que l'oprateur get :
get ou une autre proprit avec le mme identifiant (les codes suivants : { get x() { }, get x() { } } et { x: ..., get x() { } } sont interdits).Un accesseur peut tre supprim grce l'oprateur delete.
getCe code va crer une pseudo-proprit dernier de l'objet o qui va retourner la dernire entre du tableau o.journal :
var o = {
get dernier() {
if (this.journal.length > 0) {
return this.journal[this.journal.length - 1];
} else {
return null;
}
},
journal: ["toto", "actu"],
};
console.log(o.dernier); // "actu"
Notez qu'essayer d'assigner dernier une valeur ne le modifiera pas.
deletedelete o.dernier;
definePropertyAfin d'ajouter un accesseur un objet qui existe dj, on peut utiliser la mthode Object.defineProperty().
var o = { a: 0 };
Object.defineProperty(o, "b", {
get: function () {
return this.a + 1;
},
});
console.log(o.b); // Utilise l'accesseur qui gnre a + 1 (qui correspond 1)
var expr = "toto";
var obj = {
get [expr]() {
return "truc";
},
};
console.log(obj.toto); // "truc"
Les accesseurs permettent de dfinir des proprits sur un objet mais ils ne calculent pas la valeur de la proprit tant qu'il n'y a pas d'accs envers celle-ci. Un accesseur dlgue le cot de calcul jusqu'au moment o la valeur est vraiment ncessaire (si cette dernire n'est jamais utilise, cela ne cote alors rien).
Une technique supplmentaire pour optimiser ou retarder le calcul d'une valeur d'une proprit et de la mettre en cache pour les accs ultrieurs consiste utiliser des accesseurs intelligents mmoss . La valeur est calcule lors du premier appel de l'accesseur puis est mise en cache afin que les appels ultrieurs renvoient la valeur en cache sans la recalculer. Cette mthode peut s'avrer utile dans plusieurs situations :
Cela signifie qu'un tel accesseur ne doit pas tre utilis si la valeur peut tre modifie au cours du temps. En effet, avec la dfinition qu'on vient de lui donner, un tel accesseur ne recalculera pas la valeur.
Dans l'exemple suivant, l'objet possde un accesseur en proprit propre. Lors de l'accs la proprit, la proprit est retire de l'objet puis rajoute mais sous forme d'une proprit de donne (et non d'un accesseur). Enfin, la valeur est renvoye :
get notifier() {
delete this.notifier;
return this.notifier = document.getElementById("bookmarked-notification-anchor");
},
Cet exemple est utilis dans le code de Firefox, notamment dans le code du module XPCOMUtils.jsm qui dfinit la fonction defineLazyGetter().
get ou defineProperty ?Bien que le mot-cl get et la mthode Object.defineProperty() aient des rsultats similaires, il subsiste une diffrence lorsqu'on utilise les classes.
Lorsqu'on utilise get, la proprit sera dfinie sur le prototype de l'objet. Avec Object.defineProperty(), la proprit sera dfinie sur l'instance laquelle la mthode s'applique.
class Exemple {
get coucou() {
return "monde";
}
}
const obj = new Exemple();
console.log(obj.coucou);
// "monde"
console.log(Object.getOwnPropertyDescriptor(obj, "coucou"));
// undefined
console.log(
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), "coucou"),
);
// { configurable: true, enumerable: false, get: function get coucou() { return 'monde'; }, set: undefined }
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-method-definitions |
setdeleteObject.defineProperty()Object.prototype.__defineGetter__()Object.prototype.__defineSetter__()Cette page a t modifie le 7 sept. 2026 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |