Richembed не работает [дубликат]

Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.

Пример:

string postalcode=Customer.Address.PostalCode; 
//if customer or address is null , this will through exeption

здесь, если адрес имеет значение null, то вы получите NullReferenceException.

Итак, в качестве практики мы всегда должны использовать проверку нуля, прежде чем обращаться к свойствам в таких объектах (особенно в общих)

string postalcode=Customer?.Address?.PostalCode;
//if customer or address is null , this will return null, without through a exception
61
задан Rob W 11 April 2012 в 14:52
поделиться

11 ответов

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

function x(a,b,c){}
new x(1,2,3);               // produces no errors

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

function Project(a,b,c) {}
Project = {};               // or possibly   Project = new Project
new Project(1,2,3);         // -> TypeError: Project is not a constructor

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

function Project(){}
function localTest() {
    new Project(1,2,3); // `Project` points to the local variable,
                        // not the global constructor!

   //...some noise, causing you to forget that the `Project` constructor was used
    var Project = 1;    // Evaluated first
}
64
ответ дан Rob W 26 August 2018 в 19:51
поделиться

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

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

var project = {} на var project1 = {}

1
ответ дан agrm 26 August 2018 в 19:51
поделиться

Я тоже нашел googled и нашел это решение:

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

17
ответ дан Bergi 26 August 2018 в 19:51
поделиться

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

Другими словами:

function project(name){
    this.name = name;
}

//elsewhere...

//this is no good! name/case are identical so javascript barfs. 
let project = new project('My Project');

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

//with a capital 'P'
function Project(name){
    this.name = name;
}

//elsewhere...

//works! class name/case is dissimilar to variable name
let project = new Project('My Project');
1
ответ дан Colin 26 August 2018 в 19:51
поделиться

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

y.js:
var x = require("./x.js");
var y = function() { console.log("result is " + x(); }
module.exports = y;

x.js:
var y = require("./y.js");
var my_y = new y(); // <- TypeError: y is not a constructor
var x = function() { console.log("result is " + my_y; }
module.exports = x;

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

6
ответ дан Edwin Hoogerbeets 26 August 2018 в 19:51
поделиться

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

(function () {
  'use strict';

  module.exports.MyClass = class{
  ...
);

Вместо:

(function () {
  'use strict';

  module.exports.MyClass = class{
  ...
)();

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

1
ответ дан Gareth 26 August 2018 в 19:51
поделиться

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

2
ответ дан Glenn Mohammad 26 August 2018 в 19:51
поделиться

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

function proto1()
{}

var proto1 = new proto1();

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

8
ответ дан Jiten 26 August 2018 в 19:51
поделиться

Car.js

class Car {
 getName() {return 'car'};
}
export default Car;

TestFile.js

const object = require('./Car.js');
const instance = new object();

error: TypeError: instance не является конструктором

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

object = {default: Car}

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

const object = require('object-fit-images').default;
const instance = new object();
instance.getName();
-1
ответ дан Rashmi Ranganathan 26 August 2018 в 19:51
поделиться

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

Например,

// processor.js
class Processor {

}

export default Processor

//index.js
const Processor = require('./processor');
const processor = new Processor() //fails with the error

import Processor from './processor'
const processor = new Processor() // succeeds
13
ответ дан Richard Nienaber 26 August 2018 в 19:51
поделиться

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

const f = () => {}; new f(); // This throws "f is not a constructor"

33
ответ дан wprl 26 August 2018 в 19:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: