再次编辑我正准备得出结论,在 Node 模块中,您无法获得对全局对象的引用。你真的不需要;这就是模块机制的重点,我想。您导入所需的内容并导出您选择的内容。
我猜,Node 中是否存在全局对象是一个有趣的问题。我知道在 Rhino 中,肯定有;从 Java 容器提供给 Rhino 的代码没有隐式包装函数。通过 Java ScriptEngine 机制(可能来自“裸”Rhino 中的 Mozilla API),有一些方法可以将符号推送到全局上下文中,以使它们作为全局对象属性对 JavaScript 可见。
哇,这变得复杂了,Node.js 世界中的事情似乎正在发生变化。我上面写的对于 Node 0.6.2 来说是正确的,但在 0.9.0-pre 构建中,我确实有一个名为“全局”的对象,它的行为或多或少类似于浏览器中的全局对象。
下面的内容适用于浏览器和 Rhino 以及其他类似的上下文
您可以this
在全局上下文中使用。如果你需要一个名字,你可以给它一个。
var global = this;
var obj = "Hi!";
global.obj = "Bye"; // sets "obj"
一个(有点)常见的习惯用法是将代码包装在一个函数中,以保护全局命名空间。
(function( global ) {
// everything
})( this );
警告:我不是 Node 人,所以在那种文化中可能会有一些新兴的成语。
编辑——我突然想到,如果 Node 确实将代码从它在一个函数中评估的文件中包装起来,并且它没有从全局上下文中传递this
给它,那么就没有办法“找到”它,我不认为。如果你使用“use strict”(你应该),那没关系,因为无论如何你都不能真正搞乱全局上下文。