Повідомлення
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
Тип помилки
В чому справа?
Була спроба використати об'єкт чи змінну як конструктор, але сам об'єкт чи змінна не є конструктором. Дивись constructor чи new
operator для більш детальної інформації.
У JavaScript існує багато глобальних об'єктів, наприклад String
чи Array
, які можуть створюватись конструкторами використовуючи синтаксис new
. Однак, деякі глобальні об'єкти не можуть, їх властивості і методи статичні. Наступні об'єкти являються стандартом JavaScript, вони вбудовані і не мають конструкторів: Math
, JSON
, Symbol
, Reflect
, Intl
, SIMD
, Atomics
.
Генератори функцій не можуть використовуватись також.
Приклади
Помилкові випадки
var Car = 1;
new Car();
// TypeError: Car не має конструктора
new Math();
// TypeError: Math не є конструктором
new Symbol();
// TypeError: Symbol не є конструктором
function* f() {};
var obj = new f;
// TypeError: f не є конструктором
Конструктор Car
Для того щоб створити класс-конструктор, потрібно вказати його як функцію. В дужках ви можете вказати його статичні методи, наприклад виробника, модель, рік створення автомобілю. Щоб зробити це опишіть свою модель наступним чином:
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
Тепер ви можете створювати об'єкти классу Car, наприклад mycar
:
var mycar = new Car('Eagle', 'Talon TSi', 1993);
Обіцянка
Спроба повернути з функції екземляр класу, з виконанням його методу, під час виконання якоїсь функції(з ходу), вам не потрібно використовувати синтаксис типу new Promise(...).
Це є помилкою(виклик конктруктору класу Promise поза синтаксисом), виконання коду буде зупинено з помилкою TypeError: this is not a constructor
вийняток:
return new Promise.resolve(true);
Замість цього використовуй статичні методи класу Promise.resolve() чи Promise.reject() static methods:
// Це допустимо, але дуже нечитабельний синтаксис:
return new Promise((resolve, reject) => { resolve(true); })
// Замість цього, просто використовуйте статичні методи класу Promise:
return Promise.resolve(true);
return Promise.reject(false);