function foo()
{
if(this === window)
return null;
return 1;
}
var i = foo(); // returns 1;
全局函数的this
成员是什么,如果在函数中测试是在全局范围内调用还是作为成员函数,我该如何进行测试?
编辑:看起来JQuery在这里有所作为,因为每个人都向我保证foo
应该返回null
以获得普通的JavaScript。 JQuery如何改变这个?
请注意,OP在下面的评论中说,这是在Greasemonkey脚本中。
答案 0 :(得分:3)
this
指的是窗口对象。
只需alert(this);
,就会说[object Window]
但如果你这样做
var i = new foo(); // returns an object (instance of foo);
然后this
引用foo
。
答案 1 :(得分:3)
根据this,差异是因为greasemonkey(不是JQuery)。
但是,Greasemonkey用户脚本默认将所有代码包装在匿名函数包装器中,该函数包装器吞下标识符,导致它们不会以全局对象结束。
接着说,您可以使用@unwrap
使this
指向window
,就像使用常规页面上的Javascript一样。
答案 2 :(得分:0)
此成员引用整个页面,并且将始终定义 - 您的foo()方法永远不会返回null。
答案 3 :(得分:-1)
this
始终指向当前元素。在foo()
的情况下,this
指向window
。