URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8630
[ Назад ]

Исходное сообщение
"Javascript. Область видимости"

Отправлено anonymous , 19-Фев-10 14:38 
Не мог бы кто-нибудь ответить на такой вопрос

Допустим, есть класс a

function a(b,id) {
    this.b = b // в нём переменная b
    this.element = document.getElementById(id) // и DOM элемент
}

Хочется, повесив на this.element обработчик события, "увидеть" this.b

a.prototype.eventHandler = function(e) {
   alert(this.b)
}

Делаю так:

aa = new a (1,'i')
aa.element.addEventListener('DOMMouseWheel',aa.eventHandler,false)

Несмотря на то, что eventHandler вызывается как метод экземпляра aa,
this внутри функции eventHandler указывет не на aa, a на элемент aa.element.

Как обратится из обработчика события к переменной экцемпляра класса this.b ?


Содержание

Сообщения в этом обсуждении
"Javascript. Область видимости"
Отправлено unk , 23-Фев-10 17:07 
попробуйте так

>function a(b,id) {

     self = this;
>    this.b = b // в нём переменная b
>
>    this.element = document.getElementById(id) // и DOM элемент
>}
>a.prototype.eventHandler = function(e) {

   alert(self.b)
>}


"Javascript. Область видимости"
Отправлено anonymous , 23-Фев-10 23:27 
О, великий шаман!
Когда я посмотрел на предложенное вами решение, я подумал, что ни за что оно не будет работать. Для очистки совести всё же решил попробовать и увидел, что ошибался.
Спасибо! Это просто и изящно.

А мне пришлось привязывать события к объектам через функцию regObjEventHandler.
Оказывается, если так делать, то this указывает на объект, а не на элемент внутри него.
Как-то так:

function regObjEventHandler ( element,eventtype,listener,captures ) {
   element.addEventListener ( eventtype,
                              function(event) { listener.handleEvent(event); },
                              captures )
}
regObjEventHandler(aa.element,'DOMMouseScroll',aa,false)