Fiche javascript : Créer des objetsObjet de la ficheÉtat de la fiche
Plan de la fiche :
Avant proposJavascript possède des objets comme les objets string, date, math etc., Toutefois ce langage permet de construire soi-même ses propres objets. Pour imager ses possibilités nous allons créer l'objet Vehicule. Il y a deux façons de créer un objet :
Note (1) : L'opérateur new permet de créer une instance d'un certain type d'objet à partir du constructeur qui existe pour celui-ci (natif ou défini par l'utilisateur). Créer un objet personnaliséLa manière la plus pratique et la plus évolutive pour créer un objet personnalisé est celle qui nous permettra de l'instancier, c'est à dire de donner une vie propre et une existence réelle à un objet particulier à partir du modèle de l'objet créé. Création du modèle d'objet Vehicule que nous appellerons le plus simplement du monde "Vehicule". Nous allons tout d'abord créer une fonction function Vehicules () {
attention !, sans accent, sans espace et sans caractère spécial Dans cette fonction nous allons définir les propriétés que nous désirons exploiter, comme par exemple :
Note1 : Tous les paramètres qui vont servir à créer les propriétés correspondantes sont passés en paramètres à la fonction de création d'objets "Vehicules". Note2 : "this" (en minuscules) représente la fonction elle même, c'est à dire "Vehicules()". C'est un raccourcis commode qu'il faut utiliser avec prudence. Le fait d'écrire this.Type, signifie que l'on attribue à la fonction elle même (plus tard aux objets créés avec cette fonction) la propriété Type. Créer des instances de l'objet personnaliséGénéralitésDéclarer une instance de "Vehicules", signifie créer par exemple l'objet personnalisé "MaRenault". On dira que "MaRenault" est une instance de "Vehicules". On peut aussi créer par exemple une autre instance de "Vehicules " que l'on appellerait "MaPeugeot". var MaRenault= new Vehicules( "Mégane", 110, "Noire", "Lucien"); var MaPeugeot= new Vehicules( "307HDI", 90, "Blanche", "Maxime"); Dorénavant, MaRenault ou MaPeugeot deviennent des instances de l'objet Vehicules. Les objets personnalisés MaRenault ou MaPeugeot existent maintenant en tant qu'objets personnalisés à part entière. De fait, nous pourrons désormais faire appel à eux et à leurs propriétés pour en voir le contenu. Manipulation des objets
Créer de méthodesOn peut définir des fonctions à l'intérieur de fonctions et cela fournit des méthodes aux objets. resultat = MaRenault.Prix(15) donnera 16500 € avec une TVA à 15% resultat = MaPeugeot.Prix(15) donnera 13500 € avec une TVA à 15% Note1 seul l'objet Vehicules peut exécuter la méthode Prix. Du coup, si la méthode Prix fait partie d'un autre script, il n'y aura pas d'interaction. Définir des propriétés étant elles-même d'autres objetsDans l'exemple général nous avons défini dans l'objet une propriété "Proprietaire". Dans ce cas il s'agit d'une chaine de caractère correspondant au nom du propriétaire. Imaginons maintenant que l'on ait défini un autre objet appelé "Personnes" de la manière suivante : Instanciée de la façon suivante : Les instanciations de l'objet "Vehicules" deviendront : Et la manipulation des objets liés au propriétaire donnera : Résultat : Plutôt que de passer une chaîne littérale ou une valeur entière lors de la création des nouveaux objets, les instructions ci-dessus utilisent les objets Personne1 et Personne2 comme paramètres pour les propriétaires. Ceci permet plus de richesse d'information, une bonne visibilité du code, une évolution et une maintenance plus facile. Créer des PrototypesCe concept vient étendre les possibilités du modèle objet de Javascript, en permettant de se rapprocher encore plus de la notion de classe, mais d'une manière un peu particulière. Un prototype s'ajoute en tant que propriété d'une fonction de constructions d'objets. Ainsi la fonction de construction ne sert plus que de constructeur d'objet alors que son prototype prend en charge la partie définition du comportement (des méthodes). Cette possibilité permet d'ajouter des propriétés personnalisées à l'objet. Note(1) : le prototype hérite des propriétés de son constructeur. Ainsi ces propriétés peuvent être accédées via l'objet prototype.
Avantages liés à l'utilisation de prototypesAu lieu de faire un prototype comme ci-dessus on aurait put inclure toutes les méthodes dans l'objet lui-même et le résultat aurait été identique. Toutefois ce choix entraine :
Pour toutes ces raisons et certainement d'autres utilisez de préférence les prototypes : les propriétés dans les objets, les méthodes dans les prototypes. Ajouter des méthodes aux objets natifsDe base les objets natifs possèdent un objet prototype associé et autorisant ainsi l'ajout de méthodes propriétaires. Ajout de méthodesCela peut être trés interessant : supposons que vous vouliez manipuler des chaînes de caractères et qu'aucune méthode proposée par l'objet natif "string" ne vous apporte satisfaction pour un usage particulier, et vous voulez par souci d'homogénéité de votre code travailler à partir de l'objet "string". Alors comme la notion de prototype vous le permet (les objets natifs possèdent eux aussi un objet prototype autorisant donc la modification de leurs méthodes) vous allez créer votre propre méthode. Exemple : on veut une méthode qui retourne une chaine de caractères inverse par rapport à la chaine source : ça ne sert pas à grand chose mais ça permet de voir la démarche. Remarques
Remplacer des méthodesAttention : Même si cette possibilité est possible, elle est à manipuler avec précaution car cela peut perturber d'autres scripts utilisant l'objet natif en question. Application au projet de site webLe but de l'exercice est de créer un objet javascript qui puise nous renvoyer des informations lorsque l'on cliquera sur un produit floral. Le renvoi se fera dans une petite fenêtre (div) qui sera crée dynamiquement lorsque l'on survolera le produit. Les informations renvoyées concerneront les dimensions, le prix, le coût d'expédition et les délais de disponibilité. |