JavaScript - 如何在严格模式下识别或定义跨平台使用的 "global"(超全局)
JavaScript - how to identify or define THE "global" (super-global) for cross-platform use in strict mode
全球参考
我正在寻找一种方法来检查 "global"(超全局,-类似于 "window")是否存在 - 如果不存在,则创建它。
几周前,我在 GitHub 的一些代码中看到过这样做,但是,现在我需要它,但我无法在任何地方找到它。我可能看错了,但它很短而且很智能,就像在 1(短)行上一样 - 没有 if
,也没有使用 var
(或 let
) - 在全球范围内--> 在严格模式下。
我已经搜索了 2 个小时试图找到它,我所能找到的只是对 "global variables" 的无数引用——在这种情况下,显然不是 "variable" 作为超级全局"window"(或在 NodeJS 中 "global")不可变。
我目前的解决方案不是很好,但它可以工作,排序:
"use strict";
if ('undefined' == typeof global)
{
Object.defineProperty
(
window,'global',
{
writable:false,
configurable:false,
enumerable:false,
value:window
}
);
}
因此,如果您尝试以下操作:
global = 'bite me!';
然后行为符合预期,它抛出:
Uncaught TypeError: Cannot assign to read only property 'global' of...
这很好,-完全符合它应有的表现。
我不确定这是否是定义它的正确方法,因为如果我这样做:
console.log(global);
然后控制台显示如下:
Window {top: Window, ...
这告诉我它不是 "global" 而是 "window"; -这是公平和幸福的 "circular";但是,我确信有更好的方法来做到这一点。
任何输入将不胜感激,谢谢
我从没想过这真的有用;但确实如此!
在全局范围内,在 use strict;
之后你可以简单地这样做:
this.Main = this;
现在您可以像使用 window
- 或 - global
一样简单地调用和定义 Main
上的内容;并且这些新属性将按预期存在于全局范围内。
在您对该对象进行了您想要的更改之后;只需致电:
Object.freeze(this.Main); // makes it immutable
如果您想一次完成所有操作(没有任何正当理由),您可以这样做:
Object.freeze(this.Main=this); // it actually works!
全球参考
我正在寻找一种方法来检查 "global"(超全局,-类似于 "window")是否存在 - 如果不存在,则创建它。
几周前,我在 GitHub 的一些代码中看到过这样做,但是,现在我需要它,但我无法在任何地方找到它。我可能看错了,但它很短而且很智能,就像在 1(短)行上一样 - 没有 if
,也没有使用 var
(或 let
) - 在全球范围内--> 在严格模式下。
我已经搜索了 2 个小时试图找到它,我所能找到的只是对 "global variables" 的无数引用——在这种情况下,显然不是 "variable" 作为超级全局"window"(或在 NodeJS 中 "global")不可变。
我目前的解决方案不是很好,但它可以工作,排序:
"use strict";
if ('undefined' == typeof global)
{
Object.defineProperty
(
window,'global',
{
writable:false,
configurable:false,
enumerable:false,
value:window
}
);
}
因此,如果您尝试以下操作:
global = 'bite me!';
然后行为符合预期,它抛出:
Uncaught TypeError: Cannot assign to read only property 'global' of...
这很好,-完全符合它应有的表现。
我不确定这是否是定义它的正确方法,因为如果我这样做:
console.log(global);
然后控制台显示如下:
Window {top: Window, ...
这告诉我它不是 "global" 而是 "window"; -这是公平和幸福的 "circular";但是,我确信有更好的方法来做到这一点。
任何输入将不胜感激,谢谢
我从没想过这真的有用;但确实如此!
在全局范围内,在 use strict;
之后你可以简单地这样做:
this.Main = this;
现在您可以像使用 window
- 或 - global
一样简单地调用和定义 Main
上的内容;并且这些新属性将按预期存在于全局范围内。
在您对该对象进行了您想要的更改之后;只需致电:
Object.freeze(this.Main); // makes it immutable
如果您想一次完成所有操作(没有任何正当理由),您可以这样做:
Object.freeze(this.Main=this); // it actually works!