Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Dans le chapitre précédent j'ai évoqué les modèles prédéfinies d'objets et leurs méthodes :
Dates, String, Math, Array, Set, Map, RegExp, etc.
Dans ce chapitre je vous montre comment créer vos propres modèles d'objets puis des instances de ces modèles.
La POO en JavaScript présentait plusieurs particularités qui la distinguait des langages classiques comme Java ou C++.
Mais progressivement JS se rapproche des autres langages en matière de POO.
Ainsi le concept de classe a été introduit par la version majeure de 2015.
Un constructeur est simplement une fonction définissant un modèle d'objet avec des propriétés et des méthodes.
Dans ce premier exemple le modèle ne comprend que des propriétés.
Une seule instruction !
<button onclick ="f1()" >Appelez le script </button >
Le modèle d'objet créé se nomme "voiture" et comprend quatre propriétés.
Je crée ensuite deux instances du modèle "voiture" : auto_jean & auto_paul.
Notez la syntaxe pour créer des objets (instances) du modèle "voiture : var nomObjet = new NomModèle(propriétés)
On peut donc dire qu'un objet est une séquence de paires propriété:valeur.
Notez l'emploi de la notation pointée : objet.propriété pour afficher la valeur d'une propriété.
Dans la dernière instruction du script j'utilise la notation template strings pour éviter une concaténation fastidieuse de
l'instruction précédente.
Dans l'exemple précédent les objets ne comprenaient que des propriétés.
Or si on veut manipuler un objet, le modèle d'objet doit proposer aussi des méthodes.
Une méthode est en fait une fonction.
Un bouton de commande appele la fonction f1().
Le script :
Le modèle d'objet créé se nomme voiture et comprend 4 propriétés et une méthode.
La méthode se nomme presenter() qui affiche ici toutes les propriétés de l'objet concerné.
Pour décrire une méthode il faut employer les mots réservés function et return.
Pour appeler une méthode il faut employer la syntaxe : objet.methode() ;
n'oubliez pas les parenthèses, une méthode c'est une fonction !
Je procède ensuite à un changement de propriétés pour l'instance "mavoiture".
Notez la syntaxe pour modifier la valeur d'une propriété : objet.propriété ="nouvelle valeur".
On dit que l'on utilise la notation pointée.
Je peux accéder directement aux propriétés de l'objet pour les modifier. On dit que ces propriétés sont publiques
car je n'ai pas procédé à l'encapsulation.
Plus loin dans ce chapitre je vous montrerai comment réaliser l'encapsulation en JS-POO.
En POO classique, une modèle d'objet est appelé classe.
La classe définit donc les propriétés et les méthodes applicables aux instances de cette classe.
Pour se rapprocher de la syntaxe POO des autres langages, la version ECMAScript de 2015 introduit les mots clé "class", & "extend" (pour l'héritage).
Dans l'exemple qui suit je définit une classe ; puis je crée une deuxième classe héritant de la première ;
je crée ensuite des instances de la classe mère et
des instances la classe fille.
J'évoque aussi la notation pointée optionnelle.
Le script :
Je définis donc la classe "Auto" ; il est d'usage que la première lettre de la classe soit une majuscule.
La fonction constructor() initialise les propriétés et méthodes.
Notez que la classe "Auto" ne comprend que des propriétés.
À partir de la classe "Auto" je définis la classe "Tacot" par héritage avec l'instruction class Tacot extends Auto.
La fonction super() reprend les attributs de la classe mère.
Dans cette nouvelle classe je définis deux nouvelles propriétés (annee & etat) et une méthode nommée "presenter()".
Je crée deux instances de la classe "Tacot" et j'affiche toutes leurs propriétés via la méthode "presenter()".
Pour la dernière instruction j'utilise la notation pointée optionnelle.
Pour prévenir de tentatives d'injections (de HTML ou JS), les propriétés d'un objet doivent être privées c'est à dire qu'elles ne sont pas accessibles directement ; il faut passer par une méthode, qui elle est publique. C'est le principe de l'encapsulation.
Pour créer des objets date, set, map, intl, regExp il faut obligatoirement utiliser le constructeur ad hoc.
Je rappelle ensuite les trois techniques pour créer des objets perso : construteur, classe, JSON.
Ensuite pour chacun de ces objets je demande le type via l'opérateur typeof puis via la propriété constructor.name.
Notez que la propriété constructor.name retourne "Object" uniquement lorsqu'il s'agit d'un objet produit de façon littérale.
Je vous montre maintenant comment produire une séquence d'objets ayant tous la même structure.
On définit une classe puis on crée des instances de cette classe et enfin on regroupe tous ces objets dans un tableau indicé.
Un 'array' est une structure itérable donc je peux parcourir cette structure avec la boucle for ... of.
On crée un tableau indicé contenenant plusieurs objets créés de façon littérale mais avec la même structure.
Membres est un tableau indicé d'objets JS.