全局函数的“this”指针是什么?

时间:2011-07-07 18:22:12

标签: javascript jquery greasemonkey member-functions

  

可能重复:
  'this' keyword, not clear
  this operator in javascript

function foo()
{
    if(this === window)
        return null;

    return 1;
}

var i = foo(); // returns 1;

全局函数的this成员是什么,如果在函数中测试是在全局范围内调用还是作为成员函数,我该如何进行测试?

编辑:看起来JQuery在这里有所作为,因为每个人都向我保证foo应该返回null以获得普通的JavaScript。 JQuery如何改变这个?

请注意,OP在下面的评论中说,这是在Greasemonkey脚本中。

4 个答案:

答案 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