Для регистрации функций_обработчиков событий служит метод addEventLis_ tener(). В объектно_ориентированном программировании можно определять об_
1 Если быть более точным, стандарт DOM утверждает, что все узлы в документе (включая, например, узлы Text) реализуют интерфейс EventTarget. Однако на практике веб_броузеры поддерживают возможность регистрации обработчиков событий только для узлов Element и Document, а также для объекта Window, несмотря даже на то, что он не относится к стандарту DOM.
17.2. Развитые средства обработки событий в модели DOM Level 2
работчики событий как методы специального объекта и затем вызывать их в этом качестве. Для Java_программистов стандарт DOM допускает именно это: в нем указано, что обработчики событий – это объекты, реализующие интерфейс Event_ Listener и метод c именем handleEvent(). При регистрации обработчика события в Java методу addEventListener() передается объект, а не функция. Для простоты привязка DOM API к JavaScript не требует реализации интерфейса EventListener и позволяет вместо этого передавать методу addEventListener() прямые ссылки на функции.
Если в объектно_ориентированной JavaScript_программе в качестве обработчи_ ков событий выступают объекты, то для их регистрации можно использовать следующую функцию:
function registerObjectEventHandler(element, eventtype, listener, captures) {
element.addEventListener(eventtype,
function(event) { listener.handleEvent(event); }
captures);
}
Любой объект может быть зарегистрирован как слушатель событий, если в нем определен метод handleEvent(). Этот метод вызывается как метод объекта_слуша_ теля, и ключевое слово this ссылается на этот объект, а не на элемент документа, сгенерировавший событие.
Хотя это не является частью спецификации DOM, броузер Firefox (и другие, по_ строенные на базе Mozilla) допускает вместо ссылки на функцию передачу объ_ ектов_слушателей событий, определяющих метод handleEvent(), непосредствен_ но в метод addEventListener(). Для этих броузеров специальная функция регист_ рации, подобная той, которую мы определяли ранее, не нужна.