Message
TypeError: "x" is not a constructor TypeError: Math is not a constructor TypeError: JSON is not a constructor TypeError: Symbol is not a constructor TypeError: Reflect is not a constructor TypeError: Intl is not a constructor TypeError: SIMD is not a constructor TypeError: Atomics is not a constructor
Type d'erreur
Quel 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 sur l'opérateur new
.
De nombreux objets globaux tels que String
ou Array
, sont constructibles avec new
. 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 constructor new Math(); // TypeError: Math is not a constructor new Symbol(); // TypeError: Symbol is not a constructor function* f() {}; var obj = new f; // TypeError: f is not a constructor
Créer un constructeur voiture
Imaginons qu'on veuille représenter des voitures sous forme d'objets. On appellera ce type voiture
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 objet maVoiture
comme ceci :
var maVoiture = new Voiture("Renault", "Twingo", 2006);