TypeError: "x" is not a constructor
The JavaScript exception "is not a constructor" occurs when there was an attempt to use an object or a variable as a constructor, but that object or variable is not a constructor.
Message
TypeError: Object doesn't support this action (Edge)
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: Atomics is not a constructor
Error type
What went wrong?
There was an attempt to use an object or a variable as a constructor, but that object
or variable is not a constructor. See constructor
or the new operator
for more information on what a constructor is.
There are many global objects, like String or Array, which
are constructable using new. However, some global objects are not and their
properties and methods are static. The following JavaScript standard built-in objects
are not a constructor: Math, JSON, Symbol,
Reflect, Intl, Atomics.
Generator functions cannot be used as constructors either.
Examples
Invalid cases
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
A car constructor
Suppose you want to create an object type for cars. You want this type of object to be
called Car, and you want it to have properties for make, model, and year.
To do this, you would write the following function:
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
Now you can create an object called mycar as follows:
var mycar = new Car('Eagle', 'Talon TSi', 1993);
In Promises
When returning an immediately-resolved or immediately-rejected Promise, you do not need to create a new Promise(...) and act on it.
This is not legal (the Promise constructor is not being called correctly) and will throw a
TypeError: this is not a constructor exception:
return new Promise.resolve(true);
Instead, use the Promise.resolve() or
Promise.reject()
static methods:
// This is legal, but unnecessarily long:
return new Promise((resolve, reject) => { resolve(true); })
// Instead, return the static method:
return Promise.resolve(true);
return Promise.reject(false);