TypeError: "x" ist kein Konstruktor
Die JavaScript-Ausnahme "is not a constructor" tritt auf, wenn versucht wurde, ein Objekt oder eine Variable als Konstruktor zu verwenden, aber dieses Objekt oder diese Variable ist kein Konstruktor.
Meldung
TypeError: x is not a constructor (V8-based & Firefox & Safari)
Fehlertyp
Was ist schiefgelaufen?
Es wurde versucht, ein Objekt oder eine Variable als Konstruktor zu verwenden, aber dieses Objekt oder diese Variable ist kein Konstruktor. Weitere Informationen darüber, was ein Konstruktor ist, finden Sie unter constructor oder dem new
Operator.
Es gibt viele globale Objekte, wie String
oder Array
, die mit new
konstruiert werden können. Einige globale Objekte sind jedoch nicht konstruiert und ihre Eigenschaften und Methoden sind statisch. Die folgenden JavaScript-Standard-Built-in-Objekte sind kein Konstruktor: Math
, JSON
, Symbol
, Reflect
, Intl
, Atomics
.
Generatorfunktionen können ebenfalls nicht als Konstruktoren verwendet werden.
Beispiele
Ungültige Fälle
const 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() {}
const obj = new f();
// TypeError: f is not a constructor
Ein Autokonstruktor
Angenommen, Sie möchten einen Objekttyp für Autos erstellen. Sie möchten, dass dieser Objekttyp Car
genannt wird, und Sie möchten, dass er Eigenschaften für Marke, Modell und Baujahr hat. Dazu würden Sie die folgende Funktion schreiben:
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
Jetzt können Sie ein Objekt namens myCar
wie folgt erstellen:
const myCar = new Car("Eagle", "Talon TSi", 1993);
In Promises
Wenn Sie ein sofort aufgelöstes oder sofort abgelehntes Promise zurückgeben, müssen Sie kein new Promise(...)
erstellen und darauf agieren. Stattdessen verwenden Sie die Promise.resolve()
oder Promise.reject()
statischen Methoden.
Dies ist nicht zulässig (der Promise
Konstruktor wird nicht korrekt aufgerufen) und wird eine TypeError: this is not a constructor
Ausnahme auslösen:
const fn = () => {
return new Promise.resolve(true);
};
Dies ist zulässig, aber unnötig lang:
const fn = () => {
return new Promise((resolve, reject) => {
resolve(true);
});
};
Stattdessen sollten Sie die statische Methode zurückgeben:
const resolveAlways = () => {
return Promise.resolve(true);
};
const rejectAlways = () => {
return Promise.reject(false);
};