Thanks to visit codestin.com
Credit goes to developer.mozilla.org

This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

TypeError: "x" is not a constructor

Сообщение

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: SIMD is not a constructor
TypeError: Atomics is not a constructor

Тип ошибки

TypeError

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

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

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

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

Примеры

Неправильное использование

js
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

Конструктор "car" (автомобиль)

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

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

Теперь вы можете создать объект, который называется mycar (мой автомобиль) следующим образом:

js
var mycar = new Car("Лада", "Самара", 1993);

В Промисах

В случае, когда возвращается незамедлительно разрешённый или незамедлительно отклонённый промис, вам не нужно создавать новый промис new Promise(...) и работать с ним.

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

js
return new Promise.resolve(true);

Вместо этого используйте статические методы - Promise.resolve() или Promise.reject() :

js
// Это допустимо, но слишком длинно, в этом нет необходимости:
return new Promise((resolve, reject) => {
  resolve(true);
});

// Вместо этого, возвращайте статический метод:
return Promise.resolve(true);
return Promise.reject(false);

Смотрите также