это === окно в firebug

Я написал простую веб-страницу следующим образом:

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

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


Итак, если this в firebug означает объект firebug, как я могу сослаться на обычный this?


person Just a learner    schedule 09.03.2010    source источник
comment
в качестве примечания, URL-адрес javascript:alert(this === window) дает true, так что это как-то связано с тем, как Firebug оценивает вещи. Я читал об этом недавно, пытаясь найти, хотя.   -  person cobbal    schedule 09.03.2010
comment
Если вы можете получить доступ к окну через window, почему вы хотите ссылаться на него как this?   -  person Josh Lee    schedule 09.03.2010


Ответы (4)


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

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

person Arun P Johny    schedule 09.03.2010

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

person Sean Vieira    schedule 09.03.2010

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

person Matthew Flaschen    schedule 09.03.2010

Итак, если this в firebug означает объект firebug, как я могу сослаться на обычный this?

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

Из Обзора языка программирования JavaScript Дугласа Крокфорда:

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

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

person Walter Rumsby    schedule 09.03.2010