set
permet de lier une propriété d'un objet à une fonction qui sera appelée à chaque tentative de modification de cette propriété.Exemple :
class CodeSecret {
constructor(num) {
// invokes the setter
this.code = num;
}
set code(num) {
if ( !/^ISBN/.test(num)) {
console.log("votre code doit commencer par ISBN");
return;
}
this._code = num;
}
get code() {
return this._code;
}
}
let t = new CodeSecret("dD1");
https://es6console.com/jpbn7x38/
class Point {
constructor(x, y) {
Object.assign(this, { x, y });
}
set x(val) {
console.log("dans set x");
try {
if (val < 0) {
throw "la valeur de x ne doit pas être négative";
}
this._x = val;
this._pos = { x: this._x, y: this._y }
}
catch (e) {
console.log(e);
}
}
get x() {
return this._x;
}
set y(val) {
console.log("dans set y");
try {
if (val < 0) {
throw "la valeur de y ne doit pas être négative";
}
this._y = val;
this._pos = { x: this._x, y: this._y }
}
catch (e) {
console.log(e);
}
}
get y() {
return this._y;
}
set pos({ x = this._x, y = this._y }) {
console.log("dans set pos");
this.x = x; // permet de passer par set x qui verifie que x < 10
this.y = y;
}
get pos() {
return this._pos;
}
toString() {
return `${this.x}, ${this.y} : pos(${this.pos.x},${this.pos.y})`
}
}
let p = new Point(2, 2);
p.pos = { x: -10, y: 0 };
console.log(p.toString());
p.pos = { y: 2 };
console.log(p.toString());