Ви читаєте англійську версію цього вмісту, бо ще не існує перекладу для цієї мови. Допоможіть нам перекласти цю статтю!
Повідомлення
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);