Переклад не закінчено. Будь ласка, допоможіть перекласти цю статтю з англійської.

Повідомлення

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

Тип помилки

TypeError

В чому справа?

Була спроба використати об'єкт чи змінну як конструктор, але сам об'єкт чи змінна не є конструктором. Дивись 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);

Дивись також

Мітки документа й учасники

Зробили внесок у цю сторінку: cloudgnome
Востаннє оновлена: cloudgnome,