The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Javascript. Область видимости"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Разное)
Изначальное сообщение [ Отслеживать ]

"Javascript. Область видимости"  +/
Сообщение от anonymous (??) on 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 ?

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Javascript. Область видимости"  +/
Сообщение от unk (??) on 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)
>}

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Javascript. Область видимости"  +/
Сообщение от anonymous (??) on 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)


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру