Pages

get et set

Nous allons voir l’intérêt d’utiliser get et set pour filtrer les valeurs d'une propriété. 

classes

Nous étudions le cas des objets d'une classe.

propriétés

class Car {
constructor(model) {
    this.model = model;
    this.userGears = ['P', 'N', 'R', 'D'];
    this.userGear = this.userGears[0];
}

}

let bm = new Car("bm");

Dans l'exemple précédent, on ne peut pas éviter d'écrire une vitesse ici en dehors de P, N, R, D. On peut en effet écrire :
bm.userGear='F';

console.log(bm.userGear) // F

Nous allons voir commet l'utilisation de get et set permet de tester les valeurs.


get et set


class Car {
constructor(model) {
    this.model = model;
    this._userGears = ['P', 'N', 'R', 'D'];
    this._userGear = this._userGears[0];
}
get userGear() { return this._userGear; }
set userGear(value) {
   if(this._userGears.indexOf(value) < 0)
// if( !this._userGears.includes(value))
     throw new Error(`ATTENTION: ${value} impossible`);
   this._userGear = value;
  }
shift(gear) { this.userGear = gear; }
}

let bm = new Car("bm");

console.log(bm.userGear='N');
console.log(bm.userGear);

Voyons comment la demande d'une vitesse non autorisée se passe :
console.log(bm.userGear='F');
  • "error"
  • "Error: ATTENTION: F impossible
        at Car.set userGear [as userGear]


Objet littéral

let cart = {

  _wheels: 4, //inaccessible normalement de l'ext, car inconnue du public

  get wheels () {
    return this._wheels
  },
  set wheels (value) {
    if (value < this._wheels) {
      throw new Error('hey, come back here!')
    }
    this._wheels = value
  }
}


console.log(cart.wheels=5);
console.log(cart.wheels);

console.log(cart.wheels=1);
console.log(cart.wheels);



  • 5
  • 5
  • "error"
  • "Error: hey, come back here!
        at Object.set wheels [as wheels]