2010-03-09 3 views
1

Я написал простой веб-страницы следующим образом:это === Окно в поджигатель

<!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, как дать ответ истинную. Но когда я нажимаю F12 в FireFox и введите это окно === в консоли, это даст мне ответ ложные, почему?

Большое спасибо.


Так что если это в поджигатель означает объект Firebug, как я могу ссылаться на нормальный этот?

+0

как примечание, url 'javascript: alert (this === window)' дает 'true', так что это как-то связано с тем, как firebug evals stuff. Я читал об этом недавно, пытаясь найти, где. – cobbal

+1

Если вы можете получить доступ к окну через 'window', почему вы хотите ссылаться на него как на« это »? –

ответ

2

это ключевое слово внутри firebug относится к объекту firebug, а не к объекту окна.

Это из-за объема выполнения javascript.

3

Поскольку Firebug - это программа Javascript, работающая внутри Mozilla. this в консоли Firebug, вероятно, относится к самой консоли Firebug.

2

Нет нормальных this. Это зависит от контекста, а контекст Firebug - это/не/глобальный контекст. Другие оболочки, такие как Squarefree, выполняются в глобальном контексте.

1

Так что если это в поджигатель означает объект Firebug, как я могу ссылаться на нормальный этот?

В примере кода this будет window объектом, потому что это глобальный объект при работе в браузере. В Firebug Глобальный объект - это Firebug (установите для обоих и window в Firebug, чтобы это подтвердить).

От Douglas Крокфорд-х A Survey of the JavaScript Programming Language:

Существует специальная переменная, называется this, который устанавливается на объект, когда метод объекта вызывается. ... В простом вызове функции this устанавливается на глобальный объект (он же window)

Почему вы пытаетесь увидеть, если this является window объект в любом случае?