[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/new [Back]  [Original]

L'oprateur new - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

L'oprateur new

Baseline
Large disponibilit

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

L'oprateur new permet de crer une instance d'un certain type d'objet partir du constructeur qui existe pour celui-ci (natif ou dfini par l'utilisateur).

Le mot-cl new, utilis avec une fonction, applique les 4 tapes suivantes :

  1. Il cre un nouvel objet partir de zro
  2. Il lie cet objet un autre objet en le dfinissant comme son prototype.
  3. Le nouvel objet, cr l'tape 1, est pass comme valeur this la fonction
  4. Si la fonction ne renvoie pas d'objet, c'est la valeur this qui est renvoye.

Dans cet article

Exemple interactif

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

const car1 = new Car("Eagle", "Talon TSi", 1993);

console.log(car1.make);
// Expected output: "Eagle"

Syntaxe

js
new constructeur[([arguments])];

Paramtres

constructeur

Une fonction ou une classe qui dfinit le type de l'objet qui sera une instance.

arguments

Une liste de valeurs correspondant aux arguments avec lesquels appeler le constructeur.

Description

La cration d'un objet personnalis se fait en deux tapes :

  1. Dfinition du type d'objet en crivant une fonction.
  2. Cration d'une instance de l'objet avec new.

Pour dfinir un type d'objet, crez une fonction pour ce type qui spcifie son nom, ses proprits et ses mthodes. Un objet peut avoir des proprits qui sont elles-mmes des objets, comme on pourra le voir dans les exemples ci-dessous.

Lorsque le code new Toto(...) est excut, voici ce qui se passe :

  1. Un nouvel objet est cr qui hrite de Toto.prototype.
  2. La fonction constructrice Toto est appele avec les arguments fournis, this tant li au nouvel objet cr. new Toto sera quivalent new Toto() (i.e. un appel sans argument).
  3. L'objet renvoy par le constructeur devient le rsultat de l'expression qui contient new. Si le constructeur ne renvoie pas d'objet de faon explicite, l'objet cr l'tape 1 sera utilis. (En gnral, les constructeurs ne renvoient pas de valeurs mais si on souhaite surcharger le processus habituel, on peut utiliser cette valeur de retour).

Il est toujours possible d'ajouter une proprit un objet dfini prcdemment. Par exemple, l'instruction voiture1.couleur = "noir" ajoute une proprit couleur voiture1, et lui assigne une valeur : "noir". Cependant, ceci n'affecte aucunement les autres objets. Pour ajouter une nouvelle proprit tous les objets du mme type, cette proprit doit tre ajoute la dfinition du type d'objet Voiture.

Il est possible d'ajouter une proprit partage par tous les objets d'un type dj dfini auparavant en utilisant sa proprit Function.prototype. Ceci permet de dfinir une proprit partage par tous les objets crs avec cette fonction, plutt que simplement par une seule instance de ce type d'objet. Le code qui suit ajoute une proprit couleur avec la valeur "couleur standard" tous les objets de type Voiture, et redfinit ensuite cette valeur avec la chane "noir" uniquement pour l'instance d'objet voiture1. Pour plus d'informations, voir la page sur prototype.

js
function Voiture() {}
voiture1 = new Voiture();
voiture2 = new Voiture();

console.log(voiture1.couleur); // undefined

Voiture.prototype.couleur = "couleur standard";
console.log(voiture1.couleur); // couleur standard

voiture1.couleur = "noir";
console.log(voiture1.couleur); // noir

console.log(voiture1.__proto__.couleur); // couleur standard
console.log(voiture2.__proto__.couleur); // couleur standard
console.log(voiture1.couleur); // noir
console.log(voiture2.couleur); // couleur standard

Note : Si on n'crit pas l'appel du constructeur avec l'oprateur new, le constructeur est appel comme une fonction normale et ne cre pas d'objet. Dans ce cas, la valeur de this sera diffrente.

Exemples

Exemple : type d'objet et instance d'objet

Supposons que vous vouliez crer un type d'objet pour les voitures. Vous voulez que ce type d'objet s'appelle Voiture, et qu'il ait des proprits pour la marque, le modle et l'anne. Pour ce faire, vous cririez la fonction suivante :

js
function Voiture(marque, modle, anne) {
  this.marque = marque;
  this.modle = modle;
  this.anne = anne;
}

prsent, vous pouvez crer un objet appel ma_voiture de la manire suivante :

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

Cette instruction cre l'objet ma_voiture et assigne les valeurs spcifies ses proprits. La valeur de ma_voiture.marque est alors la chane "Volkswagen", celle de ma_voiture.anne est l'entier 1997, et ainsi de suite.

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

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

Exemple : proprit d'objet qui est elle-mme un autre objet

Supposons que vous ayez dfini un objet appel Personne de la manire suivante :

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

Et que vous avez ensuite instanci deux nouveaux objets Personne de la manire suivante :

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

Vous pouvez alors rcrire la dfinition de Voiture pour contenir une proprit propritaire qui reoit un objet Personne, comme ceci :

js
function Voiture(marque, modle, anne, propritaire) {
  this.marque = marque;
  this.modle = modle;
  this.anne = anne;
  this.propritaire = propritaire;
}

Pour instancier les nouveaux objets, vous utiliserez ensuite :

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

Plutt que de passer une chane littrale ou une valeur entire lors de la cration des nouveaux objets, les instructions ci-dessus utilisent les objets rand et ken comme paramtres pour les propritaires. Pour connatre le nom du propritaire de voiture2, on peut alors accder la proprit suivante :

js
voiture2.propritaire.nom;

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-new-operator

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page