2016-12-14 2 views
0

Существует файл JavaScript с требует JS РамочногоJavascript TypeError это не конструктор

init: function(){ 
    var self = this; 
    self.commonSolutionManager = new solution.CommonSolutionManager();   
}, 

Я создаю тестовых жасмина для тестирования выше коды. Я создаю объект для указанного выше файла с помощью этого конструктора

function solution() 
    { 
    CommonSolutionManager = function(){}; 
    } 

но бросает ошибку «TypeError: solution.CommonSolutionManager не конструктор»

+0

Вы упускаете «эр» в конце 'CommonSolutionManag' в вашей верхней части , – krillgar

+0

Я отредактировал его, но @gpgekko перевернул его –

+0

@abhishekvashistha Не специально, я добавил тег. Думаю, наши правки пришли в одно и то же время или что-то в этом роде. = S Извините, что редактировал его в – gpgekko

ответ

1

Этот блок кода помещает свой конструктор внутри closure который SCOPES конструктор ТОЛЬКО будет доступен с закрытием.

function solution() 
{ 
    CommonSolutionManager = function(){}; 
} 

Этот блок кода пытается получить доступ к конструктору, как если бы он имел свойство решения; но это не так, это больше похоже на частную переменную с функцией решения.

self.commonSolutionManager = new solution.CommonSolutionManag(); 

Возможно, вы хотели, чтобы ваш конструктор определялся следующим образом.

// create the solution object and store it in the global namespace 
solution = window.solution || {}; 

// create the constructor 
solution.CommonSolutionManag = function() {}; 

// now you can use the constructor 
var csm = new solution.CommonSolutionManag(); 

ПРИМЕЧАНИЕ. Если вы используете requireJS, то это, вероятно, не тот подход, который вы хотите предпринять. См. RequireJS: How to define a constructor?

+0

, поскольку проект jasmine уже настроен, и уже есть файл globalsetup.js, который уже нажат Файл karma.config.js. все еще получая ошибку. @Scott Boring –

+0

Я не вижу, как globalsetup.js или karma.config.js вступает в игру. Они не изменяют эффект охвата закрытия. Вероятно, вам нужно добавить еще свой код к вопросу, чтобы он стал понятнее. –

+0

все сделано. Спасибо –

0

Вы используете solution как объект, но это функция. Не ясно, как она должна работать, но следующее должно решить проблему:

var solution = new function() { 
    this.CommonSolutionManager = function(){}; 
} 

И тогда вы можете использовать new solution.CommonSolutionManager()

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