这===窗口萤火

问题描述:

我写了一个简单的网页如下:这===窗口萤火

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
<title>pop</title> 
</head> 
<body> 
<script type="text/javascript" charset="utf-8"> 
document.write(this === window); 
</script> 
</body> 
</html> 

我浏览使用IE6和FireFox 3.5.8此页面,都给出一个答案真正。但是,当我在FireFox中按F12键,然后输入这===窗口在控制台,它会给我一个答案假,为什么呢?

非常感谢。


所以,如果这在Firebug意味着萤火虫对象,我怎么能引用正常这?

+0

作为一个注释,url'javascript:alert(this === window)'给出了'true',所以这与萤火虫如何处理东西有关。我最近阅读了这篇文章,试图找到它。 – cobbal 2010-03-09 02:25:20

+1

如果你可以通过'window'访问窗口,你为什么要把它作为'this'来引用? – 2010-03-09 02:50:36

这个这个 firebug中的关键字是指萤火虫对象不是窗口对象。

这是因为javascript执行的范围。

由于Firebug是运行在Mozilla内部的Javascript程序。在Firebug控制台中的this可能指的是Firebug控制台本身。

没有正常的this。它是依赖于上下文的,Firebug的上下文是/不是全局上下文。其他shell,如Squarefree的,在全球范围内运行。

所以,如果这在Firebug意味着萤火虫对象,我怎么能引用正常这?

在你的示例代码this将是window对象,因为在浏览器中运行时是全局对象。在Firebug中,全局对象是Firebug本身(在Firebug中为this和window设置一个手表以确认这一点)。

从道格拉斯Crockford的A Survey of the JavaScript Programming Language:

有一个设置为对象时对象的方法被称为一个特殊的变量,叫this。 ... 在一个简单的函数调用,this设置为

你为什么想看看是否this是window对象反正全局对象(又名window)?