is not a constructor javascript

Я определяю такой объект:

затем я пытаюсь создать и экземпляр, как это:

но это execption бросается:

что может быть не так? Я погуглил вокруг много, но до сих пор не могу понять, что я делаю неправильно.

Содержание

  1. 11 ответов:
  2. 12 Answers 12
  3. На этой странице
  4. Сообщение
  5. Тип ошибки
  6. Что пошло не так?
  7. Примеры
  8. Неправильное использование
  9. Конструктор «car» (автомобиль)
  10. В Обещаниях (Promises)

11 ответов:

код, опубликованный в вопросе, не может генерировать эту ошибку, потому что Project не является определяемой пользователем функцией / допустимым конструктором.

вы, наверное, сделали что-то вроде этого:

объявления переменных всегда вычисляются перед остальной частью кода. Таким образом, это также может быть причиной проблем:

дополнительной причиной этого могут быть функции стрелки ES6. Они не могут быть использованы в качестве конструкторов.

const f = () => ; new f(); // This throws «f is not a constructor»

Я тоже погуглил и нашел это решение:

переменная Project где-то это не функция. Тогда new оператор будет жаловаться на это. Попробуй console.log(Project) в том месте, где вы бы использовали его в качестве конструктора, и вы его найдете.

для меня это были различия между import и require на ES6.

в моем случае я использовал имя прототипа в качестве имени объекта. Например,

Это была глупая ошибка, но может быть поможет кому-то вроде меня 😉

для моего проекта проблема оказалась круговой ссылкой, созданной вызовами require ():

причина в том, что когда он пытается инициализировать y, он создает временный объект «y» (не класс, объект!) в системе зависимостей, которая как-то еще не является конструктором. Затем, когда x.js будет определен, он может продолжать делать y конструктором. Только, x. js имеет ошибку в нем, где он пытается использовать не-конструктор y.

чтобы добавить к ответу @wprl, сокращенный метод объекта ES6, как и функции стрелки, также не может использоваться в качестве конструктора.

в моем случае я забыл открытые и закрытые парантезы в конце определения функции, обертывающей весь мой код в экспортированном модуле. То есть у меня было:

компилятор не жалуется, но оператор require в модуле импорта не устанавливает переменную, которой он назначается, поэтому она не определена в точке, которую вы пытаетесь построить, и она даст TypeError: MyClass is not a constructor ошибка.

у меня была аналогичная ошибка, и моя проблема заключалась в том, что имя и регистр имени переменной и имени конструктора были идентичны, что не работает, поскольку javascript интерпретирует предполагаемый конструктор как вновь созданную переменную.

простое изменение регистра или имени переменной устраняет проблему, хотя:

это происходит потому, что вы должны были использовать другую переменную с именем «проект» в коде. Что-то вроде var project =

чтобы код работал, измените его следующим образом:

var project = на var project1 =

вопросами и ответами.js

ошибка: TypeError: экземпляр не является конструктором

печать содержимого объекта

добавьте значение по умолчанию к функции require, и она будет работать как contructor

I am defining an object like this:

I then try to create and instance like this:

But this execption is thrown:

What could be wrong? I googled around a lot, but still can’t figure out what I am doing wrong.

12 Answers 12

The code as posted in the question cannot generate that error, because Project is not a user-defined function / valid constructor.

You’ve probably done something like this:

Variable declarations using var are hoisted and thus always evaluated before the rest of the code. So, this can also be causing issues:

An additional cause of this can be ES2015 arrow functions. They cannot be used as constructors.

For me it was the differences between import and require on ES6.

I’ve googled around also and found this solution:

You have a variable Project somewhere that is not a function. Then the new operator will complain about it. Try console.log(Project) at the place where you would have used it as a construcotr, and you will find it.

For my project, the problem turned out to be a circular reference created by the require() calls:

На этой странице

Сообщение

Тип ошибки

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

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

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

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

Примеры

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

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

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

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

В Обещаниях (Promises)

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

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

Источник: computermaker.info

Техника и Гаджеты
Добавить комментарий