2016-12-14 31 views
0

有一個JavaScript文件,要求JS框架的JavaScript類型錯誤這不是一個構造

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

我創造茉莉測試用例來測試上面的代碼。我創建了上述文件的對象與此構造

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

但它拋出錯誤「類型錯誤:solution.CommonSolutionManager不是構造函數」

+0

你錯過了「ER」在CommonSolutionManag'的'你上段結束。 – krillgar

+0

我編輯它,但@gpgekko逆轉它 –

+0

@abhishekvashistha不是故意的,我添加了一個標籤。我想我們的編輯是在同一時間或某事。 = S對不起,編輯回 – gpgekko

回答

1

的代碼塊放置一個closure的作用域內部構造函數構造函數只能在閉包中訪問。

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

的主要原因,因爲茉莉花項目已經設置好了,並且已經有了已經推入的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()

相關問題