【发布时间】:2021-08-03 16:42:53
【问题描述】:
在浏览器中运行时,附加到“窗口”对象的所有内容都将自动成为全局对象。如何创建类似于 Nodejs 中的对象?
mySpecialObject.foo = 9;
var f = function() { console.log(foo); };
f(); // This should print "9" to console
【问题讨论】:
标签: javascript node.js v8
在浏览器中运行时,附加到“窗口”对象的所有内容都将自动成为全局对象。如何创建类似于 Nodejs 中的对象?
mySpecialObject.foo = 9;
var f = function() { console.log(foo); };
f(); // This should print "9" to console
【问题讨论】:
标签: javascript node.js v8
您可以为此目的使用预定义对象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 对象已定义。
【讨论】:
module.exports 对象。有关更多信息,请查看 nodejs require 的工作原理。
您可以将全局内容附加到 process 而不是 window
【讨论】:
您可以使用 GLOBAL 对象。
fruit = 'banana';
console.log(GLOBAL.fruit); // prints 'banana'
var car = 'volks';
console.log(GLOBAL.car); // prints undefined
【讨论】:
如果您要将 Web 控制台与在终端中运行的节点(均为 Javascript)进行比较:
window global(注意:GLOBAL 已弃用)
在 Web 控制台中:window.wgSiteName(随机显示功能)
在节点(终端)中:global.url
document process(注意:程序进程正在运行)
在 Web 控制台中:document.title
在节点(终端)中:process.title
【讨论】:
我找到了这个简单的解决方案:
var mySpecialObject = global;
在普通浏览器中:
var mySpecialObject = this; // Run this at global scope
【讨论】:
无论环境如何,您现在都可以使用globalThis 而不是global 和window。每个最新的浏览器和 Node 12+ 都支持它。它是 ES2020 的一部分
【讨论】: