Mutateurs : Getter, Setter

En programmation objet, il est d'usage pour certaines propriétés sensibles de ne pas accéder directement aux propriétés.

Pour lire et modifier leurs valeurs, on passe par l'intermédiaire de méthodes qui permettent de sécuriser leur utilisation.

Ces méthodes s'appellent des accesseurs (getter) pour lire leurs valeurs et des mutateurs (setter) pour modifier leurs valeurs.

1
const fiche = {
2
  patronyme: "",
3
  changerNom: function (nom) {
4
      this.patronyme = nom.replace(/[^a-z]/ig,'');  // ne garde que les caractères alphanumériques
5
  },
6
  afficherNom: function () {
7
      return this.patronyme.toUpperCase();          // retourne le patronyme en majuscule
8
  }
9
}
10
11
fiche.changerNom('3dup56ont');        // {patronyme: 'dupont', changerNom: ƒ, afficherNom: ƒ}
12
console.log(fiche.afficherNom());     // affiche 'DUPONT'
13
14

En JavaScript, on peut simuler l'affectation et la lecture de propriétés d'objets en cachant le passage par des accesseurs et des mutateurs.

DéfinitionGetter

Un accesseur est une méthode qui permet de récupérer un contenu comme si on lisait une propriété.

1
const fiche = {
2
  patronyme: "dUpOnT"
3
}
4
5
Object.defineProperty(fiche, 'nom', {
6
  get: function() {
7
    return this.patronyme.toUpperCase();
8
  }
9
})

Testez le code précédent et vérifiez les instructions suivantes

1
fiche
2
fiche.nom

DéfinitionSetter

Un mutateur est une méthode qui permet d'affecter un contenu comme si on affectait une propriété.

1
const fiche = {
2
  patronyme: ""
3
}
4
5
Object.defineProperty(fiche, 'nom', {
6
  set: function(nom) {
7
    this.patronyme = nom.replace(/[^a-z]/ig,'');
8
  }
9
})

Testez le code précédent et vérifiez les instructions suivantes

1
fiche.nom = "du45po67nt"
2
fiche

DéfinitionÉcriture simplifiée des getters et setters

1
const fiche = {
2
  patronyme: "",
3
  get nom(){return this.patronyme.toUpperCase()},
4
  set nom(nom){this.patronyme = nom.replace(/[^a-z]/ig,'')}
5
}