如何在Nodejs中模拟“窗口”对象?

时间:2013-01-22 05:55:39

标签: javascript node.js v8

在浏览器中运行时,附加到“window”对象的所有内容都将自动成为全局对象。如何创建类似于Nodejs中的对象?

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

6 个答案:

答案 0 :(得分: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);
}

请确保您不使用var关键字,因为global对象已定义。

有关文档,请查看http://nodejs.org/api/globals.html#globals_global

答案 1 :(得分:4)

您可以将全局内容附加到process而不是window

答案 2 :(得分:1)

您可以使用GLOBAL对象。

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

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

答案 3 :(得分:0)

我来到这个简单的解决方案:

var mySpecialObject = global;

在普通浏览器中:

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

答案 4 :(得分:0)

如果您要将Web控制台与终端中运行的节点(两个Javascript)进行比较:

window< - > global(注意:不推荐使用GLOBAL)

Web控制台中的

window.wgSiteName(随机显示功能)

节点(终端)中的

global.url

document< - > process(注意:程序流程现在正在运行)

Web控制台中的

document.title

节点(终端)中的

process.title

答案 5 :(得分:0)

无论环境如何,您现在都可以使用 globalThis 代替 globalwindow。每个最近的浏览器和 Node 12+ 都支持它。这是 ES2020 的一部分