Область окна консоли Firebug. Почему «это» не всегда одно и то же? - PullRequest
6 голосов
/ 26 ноября 2009

Объем консоли Firebug. Почему «это» не всегда одно и то же? Разве это не должно быть "окно" все время?

Ответы [ 3 ]

3 голосов
/ 26 ноября 2009

Значение 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 в контексте выполнения и консоли. По этой причине вы можете использовать консоль для настройки значений переменных и свойств во время отладки.

2 голосов
/ 26 ноября 2009

Ключевое слово this всегда относится к владельцу вызываемой функции. Вы можете прочитать четкое и подробное объяснение этого здесь .

Из статьи, на которую я ссылался выше, я думаю, это объясняется наиболее четко:

альтернативный текст http:////i49.tinypic.com/ax1jxw.png

2 голосов
/ 26 ноября 2009

В функции, вызываемой напрямую без явный объект-владелец, вызывает значение это по умолчанию объект (окно в браузере).

В функции, вызываемой с использованием метода синтаксис вызова, например objname.myFunction() или objname['myFunction'](), вызывает значение этого параметра должно быть objname.

Подробнее о вызывающих функциях в JavaScript

JavaScript, 5 способов вызова функции

...