JavaScript的 - 检查是否在全球范围内
-
23-08-2019 - |
题
当一个函数被附加到对象,并要求:
function f() { return this.x; }
var o = {x: 20};
o.func = f;
o.func(); //evaluates to 20
this
指的是调用函数为的方法的对象。这是相当于做f.call(o)
。
当调用该函数时不作为对象的一部分,this
指全局对象。如何检查如果一个函数正在从非对象上下文叫什么名字?是否有访问全局对象的任何标准关键字?是做这样的事情的唯一途径?
globalobj = this;
function f() { if (this == globalobj) doSomething(); }
请注意:我心里也没有特别的用例在这里 - 我其实是问这个确切机制
。解决方案
全局对象实际上是窗口的,所以你可以做
if (this === window)
其他提示
在下面应因为使用Function.call为NULL值将调用它在全球范围内工作。
this === ((function () { return this; }).call(null))
一个更简单的变型中,
this === (function () { return this; })()
也将工作,但我认为首先让意图更清晰。
RoBorg的答案是概念上正确的 - 除了window
只有在浏览器主线程(所以这一定是排除了工作线程之类的,以及任何非浏览器托管JS,这是越来越少的情况下可用不常见)。
您最安全的赌注是基本上你上面有什么,而是你应该使用var
和===
,因为它是可能的解释更彻底地优化这样的访问。
不隶属于 StackOverflow