Не мог бы кто-нибудь ответить на такой вопросДопустим, есть класс 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 ?
попробуйте так>function a(b,id) {
self = this;
> this.b = b // в нём переменная b
>
> this.element = document.getElementById(id) // и DOM элемент
>}
>a.prototype.eventHandler = function(e) {alert(self.b)
>}
О, великий шаман!
Когда я посмотрел на предложенное вами решение, я подумал, что ни за что оно не будет работать. Для очистки совести всё же решил попробовать и увидел, что ошибался.
Спасибо! Это просто и изящно.А мне пришлось привязывать события к объектам через функцию regObjEventHandler.
Оказывается, если так делать, то this указывает на объект, а не на элемент внутри него.
Как-то так:function regObjEventHandler ( element,eventtype,listener,captures ) {
element.addEventListener ( eventtype,
function(event) { listener.handleEvent(event); },
captures )
}
regObjEventHandler(aa.element,'DOMMouseScroll',aa,false)