--- title: 'TypeError: "x" is not a constructor' slug: Web/JavaScript/Reference/Errors/Not_a_constructor tags: - Fehler - JavaScript - TypeError translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor original_slug: Web/JavaScript/Reference/Fehler/Not_a_constructor ---
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
{{jsxref("TypeError")}}
Es wurde versucht auf ein Objekt oder eine Variable zuzugreifen welche kein Konstruktor ist. Mehr darüber, was ein Konstruktur ist, finden Sie unter {{Glossary("constructor")}} oder in der Beschreibung des new
Operators.
Es gibt viele globale Objekte, wie {{jsxref("String")}} oder {{jsxref("Array")}}, welche mittels new
erstellt werden können. Jedoch funktioniert das bei einigen Objekten nicht und deren Eigenschaften und Methoden sind statisch.
Die folgenden Standard build-in Objekte sind keine Konstruktoren: {{jsxref("Math")}}, {{jsxref("JSON")}}, {{jsxref("Symbol")}}, {{jsxref("Reflect")}}, {{jsxref("Intl")}}, {{jsxref("SIMD")}}, {{jsxref("Atomics")}}.
Generelle Funktionen können ebenso nicht als Konstruktor verwendet werden.
var Car = 1; new Car(); // TypeError: Car 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
Stellen Sie sich vor, Sie erstellen ein Objekt vom Typ vars. Sie wollen dieses Objekt als Car
bezeichen und es soll Eigenschaften für make, model und year besitzt. Um dies zu erreichen, schreiben Sie die folgende Funktion:
function Car(make, model, year) { this.make = make; this.model = model; this.year = year; }
Jetzt können Sie wie folgt ein Objekt mit dem Namen mycar
erstellen:
var mycar = new Car('Eagle', 'Talon TSi', 1993);
Bei Rückgabe eines Promises, welches sofort im Status resolved oder rejected ist, brauchen Sie kein neues Promise mit new Promise(...) erstellen und damit zu arbeiten.
Folgendes ist nicht erlaubt (der Promise Konstruktor wird nicht korrekt aufgerufen) und wirft eine TypeError: this is not a constructor
Exception.
return new Promise.resolve(true);
Verwenden Sie stattdessen Promise.resolve() oder die statische Methode Promise.reject():
// Das ist erlaubt, aber unnötig lang: return new Promise((resolve, reject) => { resolve(true); }) // Alternative Verwendung der statische Methoden: return Promise.resolve(true); return Promise.reject(false);
new
Operator