Guide JavaScript 1.5:Création d'objets:Utilisation d'une fonction constructeur
Un article de MDC.
[modifier] Utilisation d'une fonction constructeur
Une alternative aux initialisateurs pour la création d'un objet est de suivre ces deux étapes :
- Définir le type d'objet en écrivant une fonction constructeur.
- Créer une instance de l'objet avec l'opérateur
new.
Pour définir un type d'objet, créez une fonction pour celui-ci qui spécifie son nom, ses propriétés et ses méthodes. Par exemple, supposons que vous vouliez créer un type d'objet pour les voitures. Vous voulez que ce type d'objet se nomme voiture, et qu'il dispose de propriétés pour la marque, le modèle et l'année. Pour ce faire, vous écririez la fonction suivante :
function voiture(marque, modèle, année) {
this.marque = marque;
this.modèle = modèle;
this.année = année;
}
Remarquez qu'on utilise this pour assigner des valeurs aux propriétés de l'objet à partir des valeurs passées à la fonction.
À présent, il est possible de créer un objet appelé ma_voiture comme ceci :
ma_voiture = new voiture("Ford", "Escort", 1993);
Cette instruction crée ma_voiture et assigne les valeurs spécifiées à ses propriétés. La valeur de ma_voiture.marque est donc la chaîne "Ford", ma_voiture.année est l'entier 1993, etc.
Vous pouvez créer autant d'objet voiture que vous voulez en appelant new. Par exemple,
voiture_de_ken = new voiture("Nissan", "300ZX", 1992);
voiture_du_boss = new voiture("Mazda", "Miata", 1990);
Un objet peut avoir une propriété qui est elle-même un autre objet. Par exemple, supposons que vous définissiez un objet appelé personne de la manière suivante :
function personne(nom, age, sexe) {
this.nom = nom;
this.age = age;
this.sexe = sexe;
}
et instanciez ensuite deux nouveaux objets personne comme suit :
robert = new personne("Robert Dubois", 33, "M");
ken = new person("Ken Jones", 39, "M");
Vous pouvez ensuite réécrire la définition de voiture pour qu'une nouvelle propriété contenant un objet personne en fasse partie :
function voiture(marque, modèle, année, propriétaire) {
this.marque = marque;
this.modèle = modèle;
this.année = année;
this.propriétaire = propriétaire;
}
Pour instancier les nouveaux objets, vous utiliserez ceci :
voiture1 = new voiture("Ford", "Escort", 1993, robert);
voiture2 = new voiture("Nissan", "300ZX", 1992, ken);
Remarquez qu'au lieu de passer une chaîne littérale ou une valeur entière à la création de nouveaux objets, ces instructions utilisent les objets robert et ken comme paramètres pour les propriétaires. Ensuite, si vous voulez connaître le nom du propriétaire de la voiture 2, vous pouvez consulter la propriété suivante :
voiture2.propriétaire.nom
Notez qu'il est toujours possible d'ajouter une propriété à un objet défini précédemment. Par exemple, l'instruction
voiture1.couleur = "noir";
ajoute une propriété couleur à la première voiture, et lui assigne une valeur de "noir". Cependant, cela n'affecte pas les autres objets. Pour ajouter une propriété à tous les objets du même type, celle-ci doit être ajoutée à la définition du type voiture.