В Javascript принято понимать, что вы не должны изменять объекты, которые вам не принадлежат. Я понимаю и согласен с аргументами. Несмотря на это, я собираюсь добавить пару свойств объекта Event. Сначала я напишу немного предыстории, а также, каковы будут последствия, и после этого я надеюсь получить некоторую интеллектуальную обратную связь от вас, с за и против.
Я написал менеджер событий, у которого есть такие методы, как addEvent, removeEvent и т. Д. Когда события запускаются, я буду вызывать обработчики, передавая объект события обработчикам событий, передаваемым при регистрации EventListener.
Прежде чем передать объект события, я добавлю пару свойств к объекту события. Например; «hotKey» - с возможными значениями, такими как «shift-c», «alt-d» или «meta-a». (Последний соответствует "ctrl-a" в Windows и "cmd + a" в MacOS и т. Д. Другими словами, в зависимости от ОС он будет соответствовать правильно, и логическому шаблону обработчиков не нужно заботиться о том, включен ли он какая ОС или какой это мета-ключ)
Смысл в том, что код обработчиков становится меньше благодаря тому факту, что все необходимые операторы "if-then" были выполнены менеджером событий, например, когда сработали события, связанные с ключом. Обработчик событий в значительной степени должен иметь оператор switch и делать забавные вещи.
Помимо свойства hotKey, я планирую добавить также некоторые другие свойства, в основном, для упрощения функций обработчика событий и, таким образом, устранения обычно выполняемой логики обработчиками событий. Чтобы избежать именования, я мог бы добавить новые свойства в подобъекте. Другими словами, свойства не обязательно должны быть свойствами верхнего уровня.
Я сейчас реализую это, но надеюсь получить представление, о котором я, возможно, и не думал.
Сложение
Вопрос в том, что другие люди думают о реализации ниже. Это требует, чтобы объект события, который передается в обработчик, нуждался в изменении. Я задаю вопрос, так как на самом деле я изменяю объект, который мне не принадлежит ... но в этом случае есть преимущества в этом.
addEvent( document, "keyup", function(event) {
switch (event.hotKey) {
case 'meta-c':
// code here
break;
case 'meta-a':
// code here
break;
}
});