voici comment créer des sous classes en JavaScript.
Nous allons tenter de comprendre ce code.
Recopie
L'idée est simple, nous voulons écrire qu'un taxi "ressemble" à une voiture.Pourquoi ne pas écrire le code suivant.
L'idée est simple, un taxi a les mêmes propriétés qu'une voiture donc recopions simplement ces propriétés dans le constructeur.
Si l'idée semble ici séduisante, il faut penser que le nombre de propriétés à recopier ainsi peut être important et qu'un cas de modification d'une propriété, nous aurons à répéter cette modification en deux endroits. C'est bien pour cette raison que nous voulons éviter la recopie.
instancier Car
Pourquoi ne pas créer une instance de Car dans le constructeur.
Cette solution pose un certains nombre de problèmes.
Coté mémoire, nous créons une instance de Car à chaque fois que nous appellerons la fonction Taxi. Mais, en appelant new Car() dans le constructeur de cette façon, this dans le constructeur Car sera une nouvelle instance de Car et non de Taxi.
Rappelons nous que le langage en interne crée à chaque appel de new un objet this.
Mais, il n'y a pas de lien (mis à part le nom) entre ces deux objets this. Il y a bien deux objets distincts.
Il serait tentant d'écrire le code suivant. Mais, l’interpréteur du langage ne le permet pas et de toute façon il y aurait encore deux objets this.
Appel de la fonction
Pourquoi ne pas appeler simplement la fonction Car dans le constructeur. Encore une fois, la réponse est simple, l'objet this dans car ne représente pas une instance de Taxi mais l'objet global. Puisque la fonction est simplement invoquée dans le contexte global.Finalement, il suffirait de passer à cette fonction Car le this instance de taxi.
La solution utilise donc l'appel à la fonction call.
Il est parfois difficile d'appréhender son utilisation mais c'est en fait assez simple. Elle a pour rôle de faire correspondre les deux this qui au départ représente deux objets différents !
Une bonne explication est donnée sur la vidéo 11'30
Ainsi c'est le this de Taxi auquel on ajoutera une propriété pos. Il n'y aura donc aucun objet supplémentaire crée ni de recopie de propriétés.