Spec-Zone.ru › JavaScript

TypeError: "x" не является конструктором

Исключение JavaScript "is not a constructor" возникает, когда была предпринята попытка использовать объект или переменную в качестве конструктора, но этот объект или переменная конструктором не является.

Сообщение

TypeError: x is not a constructor (V8-based & Firefox & Safari)

Тип ошибки

TypeError

Что пошло не так?

Была предпринята попытка использовать объект или переменную в качестве конструктора, но этот объект или переменная конструктором не является. См. constructor или оператор new для получения дополнительной информации о том, что такое конструктор.

Существует множество глобальных объектов, таких как String или Array, которые могут быть сконструированы с использованием new. Однако некоторые глобальные объекты таковыми не являются, и их свойства и методы статичны. Следующие стандартные встроенные объекты JavaScript не являются конструкторами: Math, JSON, Symbol, Reflect, Intl, Atomics.

Функции-генераторы также не могут использоваться в качестве конструкторов.

Примеры

Неверные случаи

const 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() {}
const obj = new f();
// TypeError: f is not a constructor

Конструктор автомобиля

Предположим, вы хотите создать тип объекта для автомобилей. Вы хотите, чтобы этот тип объекта назывался Car, и чтобы он имел свойства для марки, модели и года. Для этого вы должны написать следующую функцию:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

Теперь вы можете создать объект под названием myCar следующим образом:

const myCar = new Car("Eagle", "Talon TSi", 1993);

В промисах (Promises)

При возвращении немедленно разрешенного или немедленно отклоненного Promise вам не нужно создавать new Promise(...) и действовать в соответствии с ним. Вместо этого используйте Promise.resolve() или Promise.reject() статические методы.

Это не является допустимым (конструктор Promise вызывается некорректно) и вызовет исключение TypeError: this is not a constructor:

function fn() {
  return new Promise.resolve(true);
}

Это допустимо, но неоправданно длинно:

function fn() {
  return new Promise((resolve, reject) => {
    resolve(true);
  });
}

Вместо этого верните статический метод:

function resolveAlways() {
  return Promise.resolve(true);
}

function rejectAlways() {
  return Promise.reject(new Error());
}

См. также

  • constructor
  • new

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Not_a_constructor

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API