Adloun

JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 6 · Application directe du cours

Un livre audio

Classes et modules · niveau 2

Énoncé

La classe Livre a un titre, un prix, une méthode description() (« titre, prix € ») et une méthode fraisDePort() qui rend 2. Écrire une sous-classe LivreAudio avec une durée en minutes, dont la description ajoute « livre audio de 2 h 05 » (pour 125 minutes), en réutilisant celle de Livre, et dont les frais de port sont nuls. Calculer le prix total, port compris, d'une commande contenant un livre à 45 € et un livre audio à 14 €.

Corrigé


class Livre {
  constructor(titre, prix) {
    this.titre = titre;
    this.prix = prix;
  }

  description() {
    return `${this.titre}, ${this.prix} €`;
  }

  fraisDePort() {
    return 2;
  }
}

class LivreAudio extends Livre {
  constructor(titre, prix, minutes) {
    super(titre, prix);
    this.minutes = minutes;
  }

  description() {
    const h = Math.floor(this.minutes / 60);
    const m = this.minutes % 60;
    return `${super.description()}, livre audio de ${h} h ${String(m).padStart(2, "0")}`;
  }

  fraisDePort() {
    return 0;
  }
}

const commande = [new Livre("Analyse MPSI", 45), new LivreAudio("Le Petit Prince", 14, 125)];
for (const l of commande) {
  console.log(l.description(), "| port :", l.fraisDePort());
}
console.log(commande.reduce((s, l) => s + l.prix + l.fraisDePort(), 0));

Analyse MPSI, 45 € | port : 2
Le Petit Prince, 14 €, livre audio de 2 h 05 | port : 0
61

super.description() réutilise le texte de la classe mère. Le total vaut : chaque objet donne ses propres frais de port, sans que la boucle ait à connaître sa classe. padStart(2, "0") écrit 5 minutes « 05 ».

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 →