Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как заставить this в обработчике события указывать на объект? (https://javascript.ru/forum/events/3027-kak-zastavit-v-obrabotchike-sobytiya-ukazyvat-na-obekt.html)

Dmitryk 11.03.2009 08:20

Как заставить this в обработчике события указывать на объект?
 
Здравствуйте!

Есть такой код:

function Cls()
{
    this.a = 1;
    document.getElementById("imgId").onclick = this.f1;
}

Cls.prototype.f1 = function()
{
    alert([this.a, this === window]);
}

var ob = new Cls();
ob.f1(); // 1, false


Для его работы, на странице должен распологаться контрол img с идентификатором imgId.

Проблема в том, что в обработчике события this указывает на элемент управления, который вызвал это событие (в данном случае на картинку imgId).

А нужно, чтобы this указывал на тот контекст, в котором обработчик события был подключен (т.е. на ob, т.к. подключили обработчик в конструкторе ob).

Если я правильно понял философию JavaScript, то это традиционная задача и все с этим сталкиваются. Как обычно решают эту проблему?

Kolyaj 11.03.2009 09:19

Цитата:

Сообщение от Dmitryk
Если я правильно понял философию JavaScript, то это традиционная задача и все с этим сталкиваются.

Вы все совершенно правильно поняли. Вот только зачем со стандартной задачей переться на форум, если в поиске все есть?
http://javascript.ru/tutorial/object/thiskeyword

Андрей Параничев 11.03.2009 12:53

function Cls()
{
    this.a = 1;
    var obj = this;
    document.body.onclick = function() {
        obj.f1();
    };
}

hogart 16.03.2009 08:45

Я использую метод apply.


Часовой пояс GMT +3, время: 19:37.