2014-02-05 10 views
12

Sie können die global object in Node.js wissen:Was ist das Stammobjekt in Node.js

{Objekt} globales Namespace-Objekt.

In Browsern ist der Top-Level-Bereich der globale Bereich. Das bedeutet, dass in Browsern, wenn Sie sich in der globalen Gültigkeitsbereichsvariable befinden, etwas eine globale Variable definiert. Im Knoten ist dies anders. Der Bereich der obersten Ebene ist nicht der globale Bereich. var etwas in einem Node-Modul ist lokal für dieses Modul.

Jetzt stolperte ich über das root Objekt, das nirgendwo dokumentiert zu sein scheint.

Obwohl es scheint, dass ich root die gleiche Art und Weise wie global verwenden können:

test1.js

foo = 'bar'; // foo is defined in the global scope (no var in front of foo) 

test2.js

require('./test1.js'); 
console.log(root.foo); 

In der Shell:

$ node test2.js 
bar 

Wenn ich global und root in der Shell inspiziere, sehen sie gleich aus. Versuchen:

$ node 
> global 
... 
> root 
... 

So scheint es, dass root ist die gleiche wie global. Aber warum die Redundanz? Warum ist root nicht dokumentiert? Ist es veraltet?

+3

Knoten; 'root === global; // true' – jAndy

+4

Das Ergebnis von 'true' sagt uns nur, dass beide Namen auf die gleiche" Objektreferenz "verweisen. – jAndy

+5

@Lego aber Referenzgleichheit ist ein stärkeres Ergebnis als tiefe Gleichheit ... – OrangeDog

Antwort

13

Es ist genau das gleiche wie global.

Es gibt ein paar undokumentierte Eigenschaften wie diese. Sie stammen aus den frühen Tagen des Knotens, wurden aber beibehalten, um die Abwärtskompatibilität aufrechtzuerhalten, und es besteht kein dringender Bedarf, sie zu entfernen.

Sie sollten sie nicht in einem neuen Code verwenden, da sie jederzeit entfernt werden könnten.

+1

Können Sie irgendeine Art von Referenz finden? Sogar im Quellcode? –

+3

https://github.com/joyent/node/blob/v0.10.25/src/node.js#L160 – OrangeDog

+0

Das scheint also eine gültige Antwort zu sein. +1 –