Adloun

JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 6 · Exercice de TD

Ne pas tout écrire en JSON

Classes et modules · niveau 2

Énoncé

Une classe Client a un nom, un courriel publics et un mot de passe privé. Que donne JSON.stringify sur un client ? Écrire une sous-classe ClientPublic dont la conversion en JSON ne donne que le nom, y compris quand le client est lui-même la propriété d'un autre objet.

Corrigé


class Client {
  #motDePasse;

  constructor(nom, courriel, motDePasse) {
    this.nom = nom;
    this.courriel = courriel;
    this.#motDePasse = motDePasse;
  }

  verifier(essai) {
    return essai === this.#motDePasse;
  }
}

class ClientPublic extends Client {
  toJSON() {
    return { nom: this.nom };
  }
}

console.log(JSON.stringify(new Client("Lina", "lina@campus.fr", "s3cret")));
console.log(JSON.stringify(new ClientPublic("Lina", "lina@campus.fr", "s3cret")));
console.log(JSON.stringify({ commande: 42, client: new ClientPublic("Hugo", "h@campus.fr", "x") }));

{"nom":"Lina","courriel":"lina@campus.fr"}
{"nom":"Lina"}
{"commande":42,"client":{"nom":"Hugo"}}

Le mot de passe, champ privé, n'est jamais écrit ; mais le courriel l'est. JSON.stringify appelle la méthode toJSON de chaque valeur qui en possède une, à tous les niveaux de l'objet : le client imbriqué dans la commande est réduit à son nom.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →