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 |