Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
new.target
Baseline Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2017.
La syntaxenew.target est disponible dans toutes les fonctions et permet entre autres de tester si une fonction ou un constructeur a été appelé avecnew. Dans les constructeurs, il fait référence au constructeur invoqué parnew. Dans les appels de fonction « normaux »,new.target vautundefined.
Dans cet article
Exemple interactif
function Foo() { if (!new.target) { throw new TypeError("calling Foo constructor without new is invalid"); }}try { Foo();} catch (e) { console.log(e); // Expected output: TypeError: calling Foo constructor without new is invalid}Syntaxe
new.target;Description
La syntaxenew.target se compose du mot-clénew, suivi d'un point puis d'un nom de propriété (icitarget). 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é parnew. Cette syntaxe permet donc de récupérer cette valeur.
new.target est une méta-propriété, disponible pour toutes les fonctions. Dansles fonctions fléchées,new.target fait référence aunew.target de la fonction englobante.
Exemples
>Utilisation denew.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 vautundefined. Cela permet de détecter si une fonction a été appelée comme constructeur avecnew :
function Toto() { if (!new.target) throw "Toto() doit être appelé avec new"; console.log("Toto instancié avec new");}new Toto(); // affiche "Toto instancié avec new" dans la consoleToto(); // lève l'exception avec "Toto doit être appelé avec new"Utilisation denew.target dans les constructeurs
Utilisés dans les appels de constructeurs de classe,new.target fait référence au constructeur utilisé directement avecnew. 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"class C { constructor() { console.log(new.target); }}class D extends C { constructor() { super(); }}var c = new C(); // function C()var d = new D(); // function D()Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-built-in-function-objects> |