当前位置:  开发笔记 > 编程语言 > 正文

JavaScript - 检查是否在全局范围内

如何解决《JavaScript-检查是否在全局范围内》经验,为你挑选了2个好方法。

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

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

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



1> Mike Samuel..:

以下应该有效,因为使用值为null的Function.call将在全局范围内调用它.

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

一个更简单的变体,

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

也会工作,但我认为第一个使意图更清晰.



2> Greg..:

全局对象实际上是窗口,您可以这样做

if (this === window)


至少如果脚本在浏览器中运行是真的(因为现在javascript可以在其​​他地方运行,它可能不是普遍的事实)
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有