Objet constructeur

Parent Previous Next



Objet constructeur



Nous avons vu que le Javascript nous permettait de créer des objets littéraux et nous allons voir maintenant comment créer de véritables objets qui possèdent des propriétés et des méthodes tout comme les objets natifs.

Un objet représente quelque chose, une idée ou un concept. Ici, suite à l'exemple de la famille, nous allons créer un objet appelé Person qui contiendra des données, à savoir le prénom, l'âge, le sexe, le lien de parenté, le travail et la liste des amis (qui sera un tableau).


L'utilisation de tels objets se fait en deux temps :

  1. On définit l'objet via un constructeur, cette étape permet de définir un objet qui pourra être réutilisé par la suite. Cet objet ne sera pas directement utilisé car nous en utiliserons une « copie » : on parle alors d'instance.
  2. À chaque fois que l'on a besoin d'utiliser notre objet, on crée une instance de celui-ci, c'est-à-dire qu'on le « copie ».

Définition via un constructeur


Le constructeur (ou objet constructeur ou constructeur d'objet) va contenir la structure de base de notre objet. Si vous avez déjà fait de la programmation orientée objet dans des langages tels que le C++, le C# ou le Java, sachez que ce constructeur ressemble, sur le principe, à une classe.


La syntaxe d'un constructeur est la même que celle d'une fonction :

function Person() {

   // Code du constructeur

}


De manière générale on met une majuscule à la première lettre d'un constructeur. Cela permet de mieux le différencier d'une fonction « normale » et le fait ressembler aux noms des objets natifs qui portent tous une majuscule (ArrayDateString…).


Le code du constructeur va contenir une petite particularité : le mot-clé this. Ce mot-clé fait référence à l'objet dans lequel il est exécuté, c'est-à-dire ici le constructeur Person. Si on utilise this au sein du constructeur Personthis pointe vers Person. Grâce à this, nous allons pouvoir définir les propriétés de l'objet Person :

function Person(nick, age, sex, parent, work, friends) {

    this.nick = nick;

    this.age  = age;

    this.sex  = sex;

    this.parent = parent;

    this.work = work;

    this.friends = friends;

}


Les paramètres de notre constructeur (les paramètres de la fonction si vous préférez) vont être détruits à la fin de l'exécution de ce dernier, alors que les propriétés définies par le biais de this vont rester présentes. Autrement dit, this.nick affecte une propriété nick à notre objet, tandis que le paramètre nick n'est qu'une simple variable qui sera détruite à la fin de l'exécution du constructeur.


Utilisation de l'objet


L'objet Person a été défini grâce au constructeur qu'il ne nous reste plus qu'à utiliser :

// Définition de l'objet Person via un constructeur

function Person(nick, age, sex, parent, work, friends) {

    this.nick = nick;

    this.age  = age;

    this.sex  = sex;

    this.parent = parent;

    this.work = work;

    this.friends = friends;

}

 

// On crée des variables qui vont contenir une instance de l'objet Person :

var seb = new Person('Sébastien', 23, 'm', 'aîné', 'Javascripteur', []);

var lau = new Person('Laurence', 19, 'f', 'soeur', 'Sous-officier', []);

 

alert(seb.nick); // Affiche : « Sébastien »

alert(lau.nick); // Affiche : « Laurence »


Que s'est-il passé ici ? L'objet Person a été défini comme nous l'avons vu plus haut. Pour pouvoir utiliser cet objet, on définit une variable qui va contenir une instance de l'objet Person, c'est-à-dire une copie. Pour indiquer au Javascript qu'il faut utiliser une instance, on utilise le mot-clé new.


Retenez bien que ce mot-clé new ne signifie pas « créer un nouvel objet », mais signifie « créer une nouvelle instance de l'objet », ce qui est très différent puisque dans le deuxième cas on ne fait que créer une instance, une copie, de l'objet initial, ce qui nous permet de conserver l'objet en question.


Il est possible de faire un test pour savoir si la variable seb est une instance de Person. Pour ce faire, il convient d'utiliser le mot-clé instanceof, comme ceci :

alert(seb instanceof Person); // Affiche true


Dans les paramètres de l'objet, on transmet les différentes informations pour la personne. Ainsi donc, en transmettant 'Sébastien' comme premier paramètre, celui-ci ira s'enregistrer dans la propriété this.nick, et il sera possible de le récupérer en faisant seb.nick.


Modifier les données


Une fois la variable définie, on peut modifier les propriétés, exactement comme s'il s'agissait d'un simple objet littéral comme vu dans la première partie du cours :

var seb = new Person('Sébastien', 23, 'm', 'aîné', 'Javascripteur', []);

 

seb.nick = 'Bastien'; // On change le prénom

seb.age  = 18;        // On change l'âge

 

alert(seb.nick + ' a ' + seb.age + 'ans'); // Affiche : « Bastien a 18 ans »


Au final, si on reprend la problématique du début de ce chapitre, on peut réécrire myArray comme contenant des éléments de type Person :

var myArray = [

    new Person('Sébastien', 23, 'm', 'aîné', 'Javascripteur', []),

    new Person('Laurence', 19, 'f', 'soeur', 'Sous-officier', []),

    new Person('Ludovic', 9, 'm', 'frère', 'Etudiant', []),

    new Person('Pauline', 16, 'f', 'cousine', 'Etudiante', []),

    new Person('Guillaume', 16, 'm', 'cousin', 'Dessinateur', []),

];


Il sera ainsi possible d'accéder aux différents membres de la famille de cette manière pour récupérer le travail : myArray[i].work.


Créé avec HelpNDoc Personal Edition: Générateur gratuit de livres électroniques et documentation

Site à deux balles