2015-07-20 206 views
-2

我想不通,爲什麼我得到一個未定義這裏「應用」:未定義的變量

module.exports = { 
    application: require('../../app').service, 
    request: require('supertest')(this.application), 
    startSetup: setup(this.application) 
}; 

它在(this.application)拋出了該請求:線。

回答

3

呦可以試試這個:

var app = require('../../app').service; 

module.exports = { 
    application: app, 
    request: require('supertest')(app), 
    startSetup: setup(app) 
}; 

的問題是,this.application還不存在。

您不能使用未定義的對象的內部零件(它僅在最終的}之後定義)。

以下是您可以在Chrome控制檯上嘗試的示例。

enter image description here

你可以看到,因爲它沒有規定不能使用的類型。

+0

但是Webstorm intellisense解決了應用程序的問題,因爲它能夠點擊它來查看它指的是什麼對象 – PositiveGuy

+1

@ WeDoTDD並不意味着它是有效的,並且在運行時會起作用。事實上,它的工作原理是有效的,並且通過給予你未定義的東西來完成它應該做的事情。如果webstorm給你任何非定義的東西,那就錯了。 –

+0

@KevinB是對的。我已經編輯了我的問題,以便更清楚地瞭解它並以現場示例複製您的案例。 – Gepser

0

Javascript不知道什麼是this.application是。該對象尚未定義,因此不能在同一對象中定義的對象定義中使用屬性。

+0

Webstorm解決它很好,那麼爲什麼如果你說這裏沒有範圍呢? – PositiveGuy

+1

因爲webstorm只是解析你的文件,並試圖建議它認爲會起作用或幫助你輸入更少。 Webstorm不是一個JavaScript運行時。 – ThrowsException