2013-01-22 17 views
7

Quando si esegue in un browser, tutto ciò che è collegato all'oggetto "finestra" diventerà automaticamente oggetto globale. Come posso creare un oggetto simile a quello in Nodejs?Come emulare l'oggetto "finestra" in Nodejs?

mySpecialObject.foo = 9; 
var f = function() { console.log(foo); }; 
f(); // This should print "9" to console 

risposta

5

è possibile allegare roba globale per process invece di window

+0

Voglio dire, voglio creare un oggetto speciale simile a "finestra". Attaccare "foo" a esso renderà "foo" globale. –

5

È possibile utilizzare l'oggetto predefinito global a tale scopo. Se si definisce foo come una proprietà dell'oggetto global, sarà disponibile in tutti i moduli utilizzati successivamente.

Per esempio, in app.js:

var http = require('http'); 
var foo = require('./foo'); 

http.createServer(function (req, res) { 
    //Define the variable in global scope. 
    global.foobar = 9; 
    foo.bar();  
}).listen(1337, '127.0.0.1'); 

E in foo.js:

exports.bar = function() { 
    console.log(foobar); 
} 

Assicurarsi di non utilizzare la parola chiave var come l'oggetto è global già definito.

Per la documentazione, vedere http://nodejs.org/api/globals.html#globals_global.

+0

Ma attenzione, a differenza del browser javascript, gli oggetti globali non sono veramente globali nel senso della parola. Sono ancora locali a un modulo, cioè un file javascript. In altre parole, qualsiasi cosa collegata all'oggetto globale di un file non sarà disponibile in un altro file, sarà necessario allegarla a uno speciale oggetto 'module.exports'. Per maggiori informazioni controlla come funziona il servizio nodejs. –

+0

Grazie per la risposta e l'avviso. Sono arrivato a questa semplice soluzione: var mySpecialObject = global. Nel browser (nell'ambito globale): mySpecialObject = this. –

1

È possibile utilizzare l'oggetto GLOBAL.

fruit = 'banana'; 
console.log(GLOBAL.fruit); // prints 'banana' 

var car = 'volks'; 
console.log(GLOBAL.car); // prints undefined 
0

Sono venuto a questa semplice soluzione:

var mySpecialObject = global; 

In normale browser:

var mySpecialObject = this; // Run this at global scope 
0

Se si dovesse confrontare la console Web di nodo in esecuzione nel terminale (sia Javascript):

window < ->global (Nota: GLOBAL i s deprecato)

in console Web: window.wgSiteName (casuale per mostrare le funzionalità)

nel Nodo (Terminal): global.url

document < ->process (Nota: il processo di programma in esecuzione in questo momento)

nella console Web: document.title

in Nodo (Terminale): process.title