Visit Mozilla.org

Référence de JavaScript 1.5 Core:Opérateurs:Opérateurs spéciaux:L'opérateur new

Un article de MDC.


Sommaire

[modifier] Résumé

L'opérateur new crée une instance d'un type d'objet personnalisé ou d'un type d'objet natif disposant d'une fonction constructeur.

Opérateur
Implémentation : JavaScript 1.0
Version ECMA : ECMA-262

[modifier] Syntaxe

nom_objet = new type_objet(param1 [,param2] ...[,paramN])

[modifier] Paramètres

nom_objet 
Nom de la nouvelle instance d'objet.
type_objet 
Type d'objet. Il doit s'agir d'une fonction définissant un type d'objet.
param1...paramN 
Valeurs de propriétés pour l'objet. Ces propriétés sont les paramètres définis pour la fonction type_objet.

[modifier] Description

La création d'un objet personnalisé se fait en deux étapes :

  1. Définition du type d'objet en écrivant une fonction.
  2. Création d'une instance de l'objet avec new.

Pour définir un type d'objet, créez une fonction pour ce type qui spécifie son nom, ses propriétés et ses méthodes. Un objet peut avoir des propriétés qui sont elles-mêmes des objet, comme on pourra le voir dans les exemples ci-dessous.

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 à voiture1, et lui assigne une valeur de "noir". Cependant, ceci n'affecte aucunement les autres objets. Pour ajouter une nouvelle propriété à tous les objets du même type, cette propriété doit être ajoutée à la définition du type d'objet Voiture.

Il est possible d'ajouter une propriété par tous les objets d'un type déjà défini auparavant en utilisant sa propriété Function.prototype. Ceci permet de définir une propriété partagée par tous les objets créés avec cette fonction, plutôt que simplement par une seule instance de ce type d'objet. Le code qui suit ajoute une propriété couleur avec la valeur null à tous les objets de type Voiture, et redéfinit ensuite cette valeur avec la chaîne "noir" uniquement pour l'instance d'objet voiture1. Pour plus d'informations, consultez prototype.

 function Voiture() {}
 voiture1 = new Voiture();
 
 alert(voiture1.couleur);           // undefined
 
 Voiture.prototype.couleur = null;
 alert(voiture1.couleur);           // null
 
 voiture1.couleur = "noir";
 alert(voiture1.couleur);           // noir

[modifier] Exemples

[modifier] Exemple : type d'objet et instance d'objet

Supposons que vous vouliez créer un type d'objet pour les voitures. Vous voulez que ce type d'objet s'appelle Voiture, et qu'il ait des 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;
}

À présent, vous pouvez créer un objet appelé ma_voiture de la manière suivante :

ma_voiture = new Voiture("Volkswagen", "Golf TDi", 1997);

Cette instruction crée l'objet ma_voiture et assigne les valeurs spécifiées à ses propriétés. La valeur de ma_voiture.marque est alors la chaîne "Volkswagen", celle de ma_voiture.année est l'entier 1997, et ainsi de suite.

Il est possible de créer un nombre illimité d'objets Voiture en appelant new. Par exemple :

voiture_de_ken = new Voiture("Nissan", "300ZX", 1992);

[modifier] Exemple : propriété d'objet qui est elle-même un autre objet

Supposons que vous ayez défini un objet appelé Personne de la manière suivante :

function Personne(nom, age, sexe) {
   this.nom = nom;
   this.age = age;
   this.sexe = sexe;
}

Et que vous avez ensuite instancié deux nouveaux objets Personne de la manière suivante :

rand = new Personne("Rand McNally", 33, "M");
ken = new Personne("Ken Jones", 39, "M");

Vous pouvez alors réécrire la définition de Voiture pour contenir une propriété propriétaire qui reçoit un objet Personne, comme ceci :

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 instantier les nouveaux objets, vous utiliserez ensuite :

voiture1 = new Voiture("Volkswagen", "Golf TDi", 1997, rand);
voiture2 = new Voiture("Nissan", "300ZX", 1992, ken);

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 rand et ken comme paramètres pour les propriétaires. Pour connaître le nom du propriétaire de voiture2, on peut alors accéder à la propriété suivante :

voiture2.propriétaire.nom