JavaScript - 检查是否在全局上下文中

标签 javascript object global

当函数附加到对象并被调用时:

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(); }

注意:我在这里没有特别的用例 - 我实际上是在问这个确切的机制。

最佳答案

下面应该可以工作,因为使用值为 null 的 Function.call 将在全局范围内调用它。

this === ((function () { return this; }).call(null))

一个更简单的变体,

this === (function () { return this; })()

也会起作用,但我认为第一个使意图更清晰。

关于JavaScript - 检查是否在全局上下文中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/383185/

相关文章:

javascript - 如何将参数传递给 jQuery。动画选项对象的完整属性?

javascript - 王牌编辑器 : How to get position of keyboard event

javascript - 无法从 javascript 书中理解这些示例,好的部分

c++ - 全局变量不起作用

javascript - Bootstrap 单选按钮组 knockout 绑定(bind)不起作用

javascript - 使用 AngularJS 服务共享数据

Python 不认为等价对象是等价的

java - 传递到数组时使用文本文件的扫描仪 I/O 问题

python - 全局变量增量和python多处理

javascript - 范围问题 - 更改回调中的数据正在更改更高的范围