Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
23 / 7 / 0
Регистрация: 24.04.2018
Сообщений: 411

Разбор сложного скрипта =)

14.10.2021, 06:39. Показов 1047. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть скрипт, который при клике перезаписывает текст html блока.
Но я не могу понять три строчки кода, я их отметил комментариями.
Не могли бы вы пожалуйста объяснить, что делают эти самые 3 строки.

Рабочий пример на Codepen:
https://codepen.io/Viperx/pen/yLoYLvo

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let a = document.querySelector('#block');
 
class Menu {
handleEvent(event) {
let method = 'on' + event.type[0].toUpperCase() + event.type.slice(1); // Зачем тут "on" что он делает? 
                                                                       // Что делает вообще эта строка?
 
this[method](event); // Это тоже зачем?
}
 
onMousedown() {  // А зачем в имя функции дописывать *on*, если в addEventListener cтоит событие mousedown?
 
a.innerHTML = "Кнопка мыши нажата";
}
 
onMouseup() {
a.innerHTML += "...и отжата.";
}
}
 
let menu = new Menu();
a.addEventListener('mousedown', menu);
a.addEventListener('mouseup', menu);
CSS
1
2
3
4
#block{
padding:10px;   
background: orange; 
}
HTML5
1
2
3
4
5
<div id ="block">                  
<div id ="text">
Заяц и волк =)
</div>
</div>
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2021, 06:39
Ответы с готовыми решениями:

Разбор сложного кода, как он работает
Всем привет! Я .NET программист, но сейчас судьба заставила парсить сайт со списком прокси серверов России. Собственно, имею некоторые...

Разбор скрипта
Тема из разряда реверса.. Я СИшный программист, но в особенностях js не рублю совершенно. Попалась вот такая функция (она в аттаче, форум...

Разбор многострочного сложного текста
Доброго времени суток. Есть текст вида: word1 &quot;option1&quot; word2 &quot;TEXT11&quot; word1 &quot;option2&quot; word2 &quot;&quot; &quot;TEXT21&quot; ...

3
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
14.10.2021, 07:25
Лучший ответ Сообщение было отмечено Kerduk как решение

Решение

Kerduk, спасибо за интересную тему.
Задача обыгрывает интерфейс EventListener https://developer.mozilla.org/... ntListener
Для этого был создан класс, реализующий интерфейс EventListener - метод handleEvent(event).

Далее скрипт в зависимости от названия события пытается выполнить обработчик, соответствующий названию события.

on и игры с CamelCase не нужны.
Достаточно методы назвать
handler_click и т.д.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        #block {
            padding: 10px;
            background: orange;
        }
    </style>
</head>
<body>
    <div id="block">
        <div id="text">
            Заяц и волк =)
        </div>
    </div>
    <script>
        let a = document.querySelector('#block');
 
        class Menu {
            constructor(element, events) {
                for (let e of events) element.addEventListener(e, this);
            }
            handleEvent(event) {
                let method = 'handler_' + event.type; // собирает строку названия метода 
                this[method](event); // По синтаксису JS можно свойство или метод вызывать не только через точку, но и по строке в квадратных скобках
            }
 
            handler_mousedown(event) {  // Тут как раз имеет смысл передать event
                a.innerHTML = "Кнопка мыши нажата";
            }
 
            handler_mouseup(event) {  // Тут как раз имеет смысл передать event
                a.innerHTML += "...и отжата.";
            }
        }
 
        let menu = new Menu(a, ["mousedown", "mouseup"]);
    </script>
</body>
</html>
Удивительно, но данная перегрузка addEventListener не приводит к потере this!
this указывает не на HTML-элемент, а именно на ООП-объект.
1
23 / 7 / 0
Регистрация: 24.04.2018
Сообщений: 411
17.10.2021, 05:08  [ТС]
amr-now, а зачем вообще игры с on и CamelCase?
В чем задумка этих игр?
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
17.10.2021, 06:46
Цитата Сообщение от Kerduk Посмотреть сообщение
а зачем вообще игры с on и CamelCase?
У объекта может быть например 50 свойств.
Чтобы быстро найти, на какое свойство надо прицеплять функцию-обработчик события, есть договоренность называть свойство с первых букв on.

Конкретно в данном примере название события приходит с маленькой буквы. Нет смысла подставлять большую букву. Будет работать и без большой буквы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2021, 06:46
Помогаю со студенческими работами здесь

Разбор сложного xml файла
Прошу помощи. Есть &lt;?xml version=&quot;1.0&quot;?&gt; &lt;DeviceProfile xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;...

Разбор не сложного блока промежуточного ПО asp.net core 3.0
Многоуважаемые форумчане, подскажите кто-нибудь такой момент..изучаю с 0 после c# ASP.NET CORE 3.0.. есть код: ...

Ребятки, нужна помощь в установке скрипта. Ничего сложного тут нет.
Имеется скрипт сайта, но проблема в том что на нем нет install. Копался, но так и не получилось его установить, да и русификацией идет не...

Разбор скрипта
Добрый вечер, Поскажите пжл, что делают след куски кода: if (/^agi_(\w+)\:\s+(.*)$/) { $AGI{$1} = $2; if ($res...

Разбор скрипта
Добрый день! Большая просьба помочь разобраться в коде: Setlocal EnableDelayedExpansion set LIST= for %%i in (*) do set...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru