new.target

La syntaxe new.target est disponible dans toutes les fonctions et permet entre autres de tester si une fonction ou un constructeur a été appelé avec new. Dans les constructeurs, il fait référence au constructeur invoqué par new. Dans les appels de fonction « normaux », new.target vaut undefined.

Syntaxe

new.target

Description

La syntaxe new.target se compose du mot-clé new, suivi d'un point puis d'un nom de propriété (ici target). Généralement et par ailleurs, new. est utilisé comme contexte pour accéder à une propriété. Ici, new. ne fait pas réellement référence à un objet. Dans les appels de constructeurs, new.target fait référence au constructeur qui a été appelé par new. Cette syntaxe permet donc de récupérer cette valeur.

new.target est une méta-propriété, disponible pour toutes les fonctions. Dans les fonctions fléchées, new.target fait référence au new.target de la fonction englobante.

Exemples

Utilisation de new.target dans les appels de fonction

Utilisé dans les appels de fonctions « classiques » (autrement dit pour les fonctions qui ne sont pas des constructeurs), new.target vaut undefined. Cela permet de détecter si une fonction a été appelée comme constructeur avec new :

function Toto(){
  if (!new.target) throw "Toto() doit être appelé avec new"
  console.log("Toto instancié avec new");
}

Toto(); // lève l'exception avec "Toto doit être appelé avec new"
new Toto(); // affiche "Toto instancié avec new" dans la console

Utilisation de new.target dans les constructeurs

Utilisés dans les appels de constructeurs de classe, new.target fait référence au constructeur utilisé directement avec new. C'est également le cas quand le constructeur est présent dans une classe parente et est délégué depuis le constructeur fils :

class A {
  constructor() {
    console.log(new.target.name);
  }
}

class B extends A { constructor() { super(); } }

var a = new A(); // affiche "A"
var b = new B(); // affiche "B"

Spécifications

Spécification Statut Commentaire
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Built-in Function Objects' dans cette spécification.
Standard Définition initiale.
ECMAScript 2016 Draft (7th Edition, ECMA-262)
La définition de 'Built-in Function Objects' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple 46 41 (41) Pas de support Pas de support Pas de support
Fonctionnalités Android Webview  Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple Pas de support 46.0 Pas de support 41.0 (41) Pas de support Pas de support Pas de support

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, blackfox
 Dernière mise à jour par : SphinxKnight,