Область окна консоли Firebug. Почему это не всегда одно и то же?

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


person André Pena    schedule 26.11.2009    source источник


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

person AnthonyWJones    schedule 26.11.2009
comment
спасибо за ответ .. но вопрос: если я не застрял в точке останова, может ли это быть чем-то другим, кроме окна в консоли? - person André Pena; 27.11.2009

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

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

Подробнее о вызове функций в JavaScript

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

person rahul    schedule 26.11.2009
comment
Этот ответ точен, поскольку он на самом деле не отвечает на вопрос, связанный с поведением консоли. - person AnthonyWJones; 26.11.2009

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

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

альтернативный текст

person Steerpike    schedule 26.11.2009