2016-12-02 74 views
1

假設我正在構建自己的命令行,並且希望能夠訪問甚至更改任何通常在NodeJS中定義的變量。我將在另一個變量中定義變量的名稱,該變量將被稱爲cmd[1]。經過適當的時間研究後,我得出的結論是,沒有全局對象包含所有已定義的變量。如何返回另一個變量中描述的變量的數據?這裏是一個小代碼塊,解釋我想要實現的內容:動態訪問變量

var readline = require('readline'); 

var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout, 
    prompt: 'CMD> ' 
}); 

rl.prompt(); 

rl.on('line', (line) => { 
    var commandl = line.trim(); 
    var cmd = commandl.split(' '); 

    switch(cmd[0]) { 
    case 'vr': 
     //here i'd like to log the variable which name is in cmd[1]. if there was a global object i would assume i could just global[cmd[1]]. 
     break; 
    case 'spit': 
     //here i'd like to log an object with every defined variables and its live changes 
     break; 
    default: 
     console.log(`${line.trim()}: command not found`); 
     break; 
    } 
    rl.prompt(); 
}).on('close',() => { 
    process.exit(0); 
}); 

有一定的解決方案。

回答

0

@Waseem I.指出,這隻適用於REPL。


但我在這裏留着後代。


在Node.js的,相當於windowglobal。例如:

> var a = 2; 
> global.a // == 2 

這包含了每一個全局變量(包括系統的像process)以及那些你定義(如上所示)。

+0

這不適用於腳本,只適用於REPL。 – Monstrum

+0

Hrm。這很奇怪,我以爲我曾經用過(現在我只是測試它,它不起作用) – MayorMonty

+0

我讀到,如果我只是定義變量沒有'var'('variable = 123'),那麼它會顯示在全球('全球['變量']'),但我不知道這是多麼可靠,它是多麼不同'var'。 – Monstrum

0

爲什麼不能創建store並使用它?

store.js

// store.js 
module.exports = {} 

app.js

// app.js 
var store = require('./store'); 
var readline = require('readline'); 

var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout, 
    prompt: 'CMD> ' 
}); 

rl.prompt(); 

rl.on('line', (line) => { 
    var commandl = line.trim(); 
    var cmd = commandl.split(' '); 

    switch(cmd[0]) { 
    case 'vr': 
     store.vr = cmd[1]; 
     //here i'd like to log the variable which name is in cmd[1]. if there was a global object i would assume i could just global[cmd[1]]. 
     break; 
    case 'spit': 
     store.spit = '...';' 
     break; 
    default: 
     console.log(`${line.trim()}: command not found`); 
     break; 
    } 
    rl.prompt(); 
}).on('close',() => { 
    process.exit(0); 
}); 

other.js

// other.js 
var store = require('./store'); 

console.log(store.vr); 

雖然你可以使用global但建議使用此方法,因爲您可以輕鬆地嘲笑商店以進行測試。

+0

我並不完全想要存儲變量,但如果我想這樣做,我可以使用'全局'。此外,它會干擾我的自然編碼習慣,而且我不期望爲一個大型項目做些什麼。無論哪種方式,如果這是不可能的,我可能不得不。 – Monstrum