2016-08-14 2 views
0

Я пошел, хотя все сообщения здесь связаны с этой темой, но не нашли рабочего решения. В моем коде может быть что-то совсем другое.Javascript: Uncaught TypeError, а не конструктор

Файл 1, RequestFactory.js

function requestFactory() { 
    this.createRequest = function (reportId) { 
     var request; 
     request = new xyzRequestManager.XyzRequest(); 
     return request; 
    } 
    return { 
     RequestFactory: requestFactory 
    } 
} 

Файл 2, request.js

function loadData() { 
    var request = requestFactory.createRequest(id); 
    request.loadReport(report); 
} 

Файл 3, xyzRequestManager.js

function() { 
var xyzRequest = function() { 
    this.loadReport = function(report) { --some data--} 
} 
return { 
    XyzRequest: xyzRequest 
} 
} 

Поэтому вызов начинается с file2, Я создаю объект запроса, вызывая requestFactory. Есть множество других функций, написанных в файле 3, который вызывается из файла 1 аналогичным образом, запрашивает фабричный объект и вызывает вызов функции.

Это дает ошибку, как,

Uncaught TypeError: xyzRequestManager.XyzRequest is not a constructor 

Я потратил часы на это, и до сих пор ни малейшего понятия, что и где я не прав. Любая помощь будет оценена по достоинству.

+0

'xyzRequest ! == XyzRequest'. – Teemu

+0

Функция 'requestFactory' добавляет метод' createRequest' к глобальному объекту, а не к функции 'requestFactory'. 'requestFactory.createRequest' является' undefined'. У этого кода много проблем. JavaScript чувствителен к регистру! – undefined

+0

Это не будет вашим реальным кодом, не в последнюю очередь потому, что показанное 'xyzRequestManager.js' потерпит неудачу с синтаксической ошибкой, а показанный код приведет к * другой * ошибке от вопроса в вопросе (см. Комментарий Vohuman's). Создайте фактический [mcve] и покажите, как вы загружаете файлы, чтобы они могли ссылаться на содержимое друг друга. –

ответ

1

Вы возвращаете объект со свойством называется XyzRequest, не xyzRequest см *** комментарий:

// Note: This is verbatim from the question other than this comment and 
// the *** comment below.. It's not valid syntax on its own (the function 
// would need a name), but I assume it's an excerpt from something larger. 
function() { 
var xyzRequest = function() { 
    this.loadReport = function(report) { --some data--} 
} 
return { 
    XyzRequest: xyzRequest  // *** 
} 
} 

Так, чтобы использовать его, вам нужно что капитал X:

request = new xyzRequestManager.XyzRequest(); 
// -----------------------------^ 
+0

обновлены и по-прежнему остаются той же проблемой. Я пробовал с тем же именем, с другим именем, с другим корпусом! Но все та же ошибка. – Anshul

Смежные вопросы