10

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

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

6 回答 6

7

您可以global为此目的使用预定义的对象。如果您定义fooglobal对象的属性,则它将在之后使用的所有模块中可用。

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

于 2013-01-22T06:15:00.927 回答
3

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

于 2013-01-22T05:57:52.367 回答
1

您可以使用 GLOBAL 对象。

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

var car = 'volks';
console.log(GLOBAL.car); // prints undefined
于 2013-12-07T16:10:45.650 回答
1

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

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

在 Web 控制台中:(window.wgSiteName随机显示功能)

在节点(终端)中:global.url

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

在 Web 控制台中:document.title

在节点(终端)中:process.title

于 2017-03-09T06:56:01.363 回答
0

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

var mySpecialObject = global;

在普通浏览器中:

var mySpecialObject = this;  // Run this at global scope
于 2013-12-08T17:39:18.413 回答
0

您现在可以同时使用,globalThis而不用考虑环境。每个最新的浏览器和 Node 12+ 都支持它。它是 ES2020 的一部分globalwindow

于 2021-08-03T08:42:53.970 回答