2016-12-02 20 views
1

Nehmen wir an, ich baue meine eigene Befehlszeile, und ich hätte gerne Zugriff auf alle Variablen, die normalerweise in NodeJS definiert sind. Ich würde den Namen der Variablen in einer anderen Variablen definiert haben, die cmd[1] heißen würde. Nach einer anständigen Recherche bin ich zu dem Schluss gekommen, dass es kein globales Objekt gibt, das alle definierten Variablen enthält. Wie kann ich die Daten einer Variablen, die in einer anderen Variablen beschrieben ist, zurückgeben? Hier ist ein kleiner Codeblock zu erklären, was ich zu erreichen bin versucht:Dynamischer Zugriff auf Variablen

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); 
}); 

Es muss eine Lösung sein.

Antwort

0

@Waseem I. hat darauf hingewiesen, dass dies nur in REPL funktioniert.


Aber ich behalte es hier für die Nachwelt.


In Node.js, ist das Äquivalent zu windowglobal. Zum Beispiel:

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

Diese enthält jede globale Variable (einschließlich System diejenigen wie process) und diejenigen, die Sie definieren (wie oben zu sehen).

+0

Dies gilt nicht für Skripte, nur REPL. – Monstrum

+0

Hrm. Das ist merkwürdig, ich hätte gedacht, dass ich es vorher benutzt habe (ich habe es gerade getestet; es funktioniert nicht) – MayorMonty

+0

Ich lese, wenn ich nur Variablen ohne 'var' (' variable = 123') definiere, würde es angezeigt werden in global ('global ['variable']') aber ich bin mir nicht sicher, wie zuverlässig das ist und wie unterschiedlich es zu 'var' ist. – Monstrum

0

Warum können Sie keine store erstellen und verwenden?

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); 

Während Sieverwenden können, aber diese Methode wird empfohlen, da Sie den Speicher für Testzwecke leicht verspotten können.

+0

Ich versuche nicht genau Variablen zu speichern, aber wenn ich das tun wollte, könnte ich 'global' verwenden. Außerdem würde es meine natürlichen Programmiergewohnheiten stören, und es ist nicht etwas, was ich für ein riesiges Projekt freue. Wie auch immer, wenn das unmöglich ist, muss ich es vielleicht tun. – Monstrum

Verwandte Themen