@ahel73
js, html, css, php, sql, mySql

Чем является событие в объекте javaScript?

В соответствии с литературой все объекты js состоят из свойств и методов (свойств которым присвоены функции), у каждого свойства, есть свои атрибуты(Configurable, Enumerable, Writable, Value), данные атрибуты можно посмотреть с помощью метода Object.getOwnPropertyDescriptor, однако у объектов DOM, например объект Element есть ещё и события например onscroll, так вот когда я пытаюсь посмотреть атрибуты данного события то у меня возвращается undefined. Отсюда вопрос так что же такое событие в контексте объекта?
  • Вопрос задан
  • 285 просмотров
Пригласить эксперта
Ответы на вопрос 1
Литература описывает то, что доступно к использованию разработчикам сайтов. Такие вещи как DOM являются частью браузера и написаны с использованием низкоуровневого кода и внутренних возможностей, которые не предоставляют разработчикам по различным причинам. Вполне вероятно, что событийная модель у DOM-элементов тоже написана с использованием внутренних средств. Хотя реализовать этот паттерн на чистом JavaScript'е не представляет из себя ничего сложного:

class Element {
    constructor() {
        this._events = {};
    }

    addEventListener(event, listener) {
        let listeners = this._events[event];

        if (!listeners) {
            listeners = this._events[event] = [];
        }

        listeners.push(listener);
    }

    removeEventListener(event, listener) {
        const listeners = this._events[event];

        if (listeners) {
            const index = listeners.indexOf(listener);

            if (index !== -1) {
                listeners.splice(index, 1);
            }
        }
    }

    dispatchEvent(event) {
        const listeners = this._events[event];

        if (listeners) {
            for (let listener of listeners) {
                listener(event);
            }
        }
    }
}

С помощью Map можно и вовсе избавиться от псевдоприватного свойства _events и хранить его ассоциативно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 апр. 2024, в 20:09
9000 руб./за проект
28 апр. 2024, в 19:54
2000 руб./за проект
28 апр. 2024, в 19:54
5000 руб./за проект