2017-01-19 22 views
0

我想創建當前具有一個吸氣劑設置類,它看起來像這樣:的Node.js模塊的getter顯示未定義

class Settings { 
    get domain() { return 'http://example.com'; } 
} 
module.exports.Settings = Settings; 

在另一個文件中,我嘗試加載它,並顯示該值吸氣劑是這樣的:

const Settings = require('./Settings'); 
console.log(Settings.domain); 

當我運行應用程序時,我console.log()打印undefined。我不確定它爲什麼這樣做。我忘了做點什麼嗎?

+0

你需要使用類實例,而不是類本身。域屬性將出現在Settings類的實例中:'new Settings'。 –

+0

注意:應該是'const Settings = require('./ Settings')。Settings;',除非您將輸出更改爲'module.exports = Settings' –

回答

1

這裏是我做過什麼:

class Settings { 
    get domain() { return 'haslfjdasdf' } 
} 

const set = new Settings(); 

console.log(set.domain); 

或者在你的情況下:

const Settings = require('./test').Settings; 
const set = new Settings(); 

console.log(set.domain); 
+0

看起來我還必須將'get domain'變成'靜態獲取域名' –

1

當您定義這樣的類時,class塊中列出的所有屬性都附加到該類的原型Settings本身其實是一個功能;你可以把它看作構造函數。

domain吸氣劑,正對樣機,將可在實例Settings,但它不連接到功能對象本身Settings

您可以通過兩種方式訪問​​:

// create an instance of Settings 
var settings = new Settings(); 
console.log(settings.domain); // => 'http://example.com' 

// access Settings' prototype directly 
console.log(Settings.prototype.domain); // => 'http://example.com' 

也可以定義domain吸氣劑static,這將意味着它應該可以在類功能本身,而不是它的原型:

// static getter 
class Settings { 
    static get domain() { return 'http://example.com'; } 
} 

console.log(Settings.domain); // => 'http://example.com'