L'opérateur get

La syntaxe get permet de lier une propriété d'un objet à une fonction qui sera appelée lorsqu'on accédera à la propriété.

Syntaxe

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

Paramètres

prop
Le nom de la propriété à lier à la fonction.
expression
Avec ECMAScript 6, il est également possible d'utiliser des expressions renvoyant un nom de propriété calculé pour le lier à une fonction.

Description

Il est parfois utile de créer une propriété qui renvoie une valeur dynamique calculée, ou de ne pas avoir recours à l'appel explicite d'une méthode 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 simultanément un accesseur  assimilé à une propriété et d'avoir cette propriété initialisée à une valeur, mais il est possible d'utiliser un accesseur et un mutateur pour créer une sorte de pseudo-propriété.

On notera que l'opérateur get :

Un accesseur peut être supprimé grâce à l'opérateur delete.

Exemples

Définir un accesseur avec l'opérateur get

Ce code va créer une pseudo-propriété dernier de l'objet o qui va retourner la dernière entrée du tableau o.journal :

var o = {
  get dernier() {
    if (this.journal.length > 0) {
      return this.journal[this.journal.length - 1];
    }
    else {
      return null;
    }
  },
  journal: []
}

Notez qu'essayer d'assigner à dernier une valeur ne le modifiera pas.

Supprimer un accesseur avec l'opérateur delete

delete o.dernier;

Définir un accesseur sur des objets existants grâce à defineProperty

Afin d'ajouter un accesseur à un objet qui existe déjà, on peut utiliser la méthode Object.defineProperty().

var o = { a:0 }

Object.defineProperty(o, "b", { get: function () { return this.a + 1; } });

console.log(o.b) // Utilise l'accesseur qui génère a + 1 (qui correspond à 1)

Utiliser un nom de propriété calculé

Note : Les noms de propriétés calculés font partie d'ECMASript 6, à ce titre, ils sont considérés comme expérimentaux et ne sont pas nécessairement supportés largement par les navigateurs. Le code qui suit entraînera une erreur de syntaxe avec les environnements incompatibles.

var expr = "toto";

var obj = {
  get [expr]() { return "truc"; }
};

console.log(obj.toto); // "truc"

Spécifications

Spécification Statut Commentaires
ECMAScript 5.1 (ECMA-262)
La définition de 'Object Initializer' dans cette spécification.
Standard Définition initiale
ECMAScript 6 (ECMA-262)
La définition de 'Method definitions' dans cette spécification.
En cours de validation comme recommandation Ajout des noms de propriétés calculés.

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple 1 2.0 (1.8.1) 9 9.5 3
Noms de propriétés calculés Pas de support 34 (34) Pas de support Pas de support Pas de support
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple (Oui) (Oui) 1.0 (1.8.1) (Oui) (Oui) (Oui)
Noms de propriétés calculs Pas de support Pas de support 34.0 (34.0) Pas de support Pas de support Pas de support

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight, BenoitL, titouandk, fscholz, teoli, Jeremie, MattouFP
Dernière mise à jour par : SphinxKnight,
Masquer la barre latérale