Область действия консоли Firebug. Почему «это» не всегда одно и то же? Разве это не должно быть "окном" все время?
Область окна консоли Firebug. Почему это не всегда одно и то же?
Ответы (3)
Значение this
в консоли будет таким же, как значение this
в коде, который в данный момент выполняется. Рассмотреть возможность:-
function outer()
{
// this is window
var x = {n:12};
var fn = function()
{
// this is object {n:12}
alert(this.n);
}
fn.call(x);
}
...
<img src="thing.gif" onclick="outer()" />
Если вы поместите точку останова на строку x = {n:12}
, переключитесь на консоль, вы обнаружите, что this
- это окно. Однако, когда вы переходите к строке alert
, this
в консоли находится объект, удерживаемый переменной x
. IOW нет различия между this
в контексте выполнения и консолью. По этой причине вы можете использовать консоль для настройки значений переменных и свойств во время отладки.
В функции, вызываемой напрямую без явного объекта-владельца, значение this становится объектом по умолчанию (окно в браузере).
В функции, вызываемой с использованием синтаксиса вызова метода, такого как
objname.myFunction()
илиobjname['myFunction']()
, значение this становится objname.
Подробнее о вызове функций в JavaScript
JavaScript, 5 способов вызвать функцию