Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
TypeError: "x" ist kein Konstruktor
Der JavaScript-Ausnahmefehler "ist kein Konstruktor" tritt auf, wenn versucht wurde, ein Objekt oder eine Variable als Konstruktor zu verwenden, aber dieses Objekt oder diese Variable ist kein Konstruktor.
In diesem Artikel
Nachricht
TypeError: x is not a constructor (V8-based & Firefox & Safari)
Fehlertyp
TypeErrorWas 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 unterconstructor oder demnew Operator.
Es gibt viele globale Objekte, wie zum BeispielString oderArray, die mitnew konstruiert werden können. Einige globale Objekte sind dies jedoch nicht, und ihre Eigenschaften und Methoden sind statisch. Die folgenden in JavaScript standardmäßig integrierten Objekte sind keine Konstruktoren:Math,JSON,Symbol,Reflect,Intl,Atomics.
Generator-Funktionen können ebenfalls nicht als Konstruktoren verwendet werden.
Beispiele
>Ungültige Fälle
const Car = 1;new Car();// TypeError: Car is not a constructornew Math();// TypeError: Math is not a constructornew Symbol();// TypeError: Symbol is not a constructorfunction* f() {}const obj = new f();// TypeError: f is not a constructorEin Auto-Konstruktor
Angenommen, Sie möchten einen Objekttyp für Autos erstellen. Sie möchten, dass dieser ObjekttypCar genannt wird und er soll Eigenschaften für Marke, Modell und Baujahr haben. Dazu würden Sie die folgende Funktion schreiben:
function Car(make, model, year) { this.make = make; this.model = model; this.year = year;}Nun können Sie ein Objekt namensmyCar 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 keinnew Promise(...) erstellen und darauf reagieren. Stattdessen verwenden Sie diestatischen MethodenPromise.resolve() oderPromise.reject().
Dies ist nicht legal (derPromise Konstruktor wird nicht korrekt aufgerufen) und wird eineTypeError: this is not a constructor-Ausnahme werfen:
function fn() { return new Promise.resolve(true);}Dies ist legal, aber unnötig lang:
function fn() { return new Promise((resolve, reject) => { resolve(true); });}Stattdessen geben Sie die statische Methode zurück:
function resolveAlways() { return Promise.resolve(true);}function rejectAlways() { return Promise.reject(new Error());}