Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
TypeError: "x" is not a constructor
Message
TypeError: Object doesn't support this action (Edge)TypeError: "x" is not a constructorTypeError: Math is not a constructorTypeError: JSON is not a constructorTypeError: Symbol is not a constructorTypeError: Reflect is not a constructorTypeError: Intl is not a constructorTypeError: SIMD is not a constructorTypeError: Atomics is not a constructor
Dans cet article
Type d'erreur
TypeErrorQuel est le problème ?
Une variable ou un objet a été utilisé comme un constructeur alors que cet objet ou cette variable n'est pas un constructeur. Pour plus d'informations sur les constructeurs, voir la page surl'opérateurnew.
De nombreux objets globaux tels queString ouArray, sont constructibles avecnew. Cependant, d'autres objets globaux ne le sont pas (leurs propriétés et méthodes sont statiques). Les objets standards natifs suivants ne sont pas des constructeur :Math,JSON,Symbol,Reflect,Intl,SIMD,Atomics.
Les fonctions génératrices ne peuvent pas non plus être utilisées comme des constructeurs.
Exemples
>Exemples invalides
var Voiture = 1;new Voiture();// TypeError: Voiture is not a constructornew Math();// TypeError: Math is not a constructornew Symbol();// TypeError: Symbol is not a constructorfunction* f() {}var obj = new f();// TypeError: f is not a constructorCréer un constructeurvoiture
Imaginons qu'on veuille représenter des voitures sous forme d'objets. On appellera ce typevoiture et on lui ajoutera des propriétés pour le fabricant, le modèle et l'année. Pour cela, on pourra écrire la fonction suivante :
function Voiture(fabriquant, modèle, année) { this.fabriquant = fabriquant; this.modèle = modèle; this.année = année;}On peut désormais créer un objetmaVoiture comme ceci :
var maVoiture = new Voiture("Renault", "Twingo", 2006);Avec les promesses
Lorsqu'on renvoie une promesse immédiatement tenue ou rompue, il n'est pas nécessaire d'utilisernew Promise() pour la manipuler. Il faut plutôt utiliser les méthodes statiquesPromise.resolve() ouPromise.reject() :
// Dans ce cas on aura une exception// "this is not a constructor"return new Promise.resolve(true);// Cette formulation fonctionne mais// est inutilement longuereturn new Promise((resolve, reject) => { resolve(true);});// On pourra autrement utiliser les// méthodes statiquesreturn Promise.resolve(true);return Promise.reject(false);