【发布时间】:2011-02-19 18:13:11
【问题描述】:
有没有办法改变 JavaScript 中的 root 对象?
例如,在浏览器中,root 对象是“window”。所以
X = 5;
console.log(Y);
等同于:
window.X = 5;
console.log(window.Y);
我现在想做的是改变这个 root 对象,所以当我执行以下操作时:
X = 6;
我需要这个的原因:
在Node.js 应用程序中,程序的每个部分都可以访问全局对象。这是一个大问题,因为 Node.js 网络服务器执行的每个脚本都可以向其中添加新变量。它们将一直存在,直到网络服务器重新启动。我想通过更改全局对象来避免这种情况。
更新
我已经测试了以下代码并得到了一个非常有趣的结果。 您对以下代码有何期待?
var X = {A:"a",B:"b"};
with(X){
A = 5;
C = 7;
}
for(a in X){
console.log(a+" is "+X[a]);
}
/*
Expected Console Output:
A is 5
B is b
C is 7
Real Console Output:
A is 5;
B is b;
*/
有没有办法按我的预期获得输出?
更新
我现在已经用下面的代码测试了模块系统。
//program.js
var t = require("./module.js");
t.Test();
console.log(A);
//module.js
A = 5;
exports.Test = function(){
console.log("hello world!");
}
输出是:
hello world!
5
这告诉我,module.js 中定义的变量“A”已添加到 program.js 的全局对象中。该模块也不能解决我的问题。
【问题讨论】:
-
专有名词不是ROOT而是
Global,在浏览器中window实现Global -
如果你使用“使用严格”;在您的代码之上,您的示例是不可能的。我来到这里是因为我想做同样的事情,实际上我想用代理对象替换全局对象。这工作正常,但失去了它的全球范围。我认为这与对旧对象的引用有关。
标签: javascript