2013-01-22 206 views
7

在瀏覽器中運行時,附加到「窗口」對象的所有內容都將自動成爲全局對象。我如何創建一個類似於Nodejs中的對象?如何在Nodejs中模擬「window」對象?

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

回答

5

可以全球東西附加到process而不是window

+0

我的意思是我想創建一個類似於「窗口」的特殊對象。將「foo」附加到它將使「foo」成爲全局。 –

5

您可以使用預定義的對象global用於這一目的。如果將foo定義爲global對象的屬性,則該對象將在之後使用的所有模塊中可用。

例如,在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'); 

而且在foo.js

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

確保爲global對象是你不使用var關鍵字已經定義。

有關文檔,請查看http://nodejs.org/api/globals.html#globals_global

+0

但要小心,與瀏覽器JavaScript不同,全局對象在單詞意義上並非真正全球化。它們仍然是本地的一個模塊,這是一個JavaScript文件。換句話說,附加到文件全局對象的任何東西都不會在另一個文件中可用,您將不得不將其附加到特殊的'module.exports'對象。有關更多信息,請查看nodejs如何工作。 –

+0

感謝您的答覆和通知。我已經到了這個簡單的解決方案:var mySpecialObject = global。在瀏覽器中(全局範圍):mySpecialObject = this。 –

1

您可以使用GLOBAL對象。

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

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

我已經來到這個簡單的解決方案:

var mySpecialObject = global; 

在正常的瀏覽器:

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

如果你比較Web控制檯節點終端中運行(包括Java腳本):

window < - >global(注意:GLOBAL i是不推薦)

在Web控制檯:window.wgSiteName(隨機顯示功能)

在節點(終端

):global.url

document < - >process(注:現在正在運行的程序處理)

in Web Console:document.title

in Node(Terminal):process.title