Обхват на прозореца на конзолата на 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