Я использую events
в javascript в течение 4 лет, но теперь я только начинаю подробно узнавать о событии.
Я понимаю, что объект события имеет 10 свойств:
bubbles
cancelable
currentTarget
defaultPrevented
eventPhase
isTrusted
target
timeStamp
type
view
и каждое из этих свойств можно получить в рамках функции, связанной с событием, используя:
e.bubbles
e.cancelable
e.currentTarget
Но мой вопрос: когда прослушиватель событий запускает функцию:
function myFunction(e) {
[... CODE HERE...]
}
Как браузер знает, что e
относится к объекту события?
Я понимаю, что любое имя может представлять объект события - e
или event
или goldfish
или что-то еще... но как браузер знает, какой из параметров функции является объектом события?
Обработчик событий в основном является функцией обратного вызова. Это означает, что это invoker (в данном случае, прослушиватель событий), который определяет, к каким аргументам вызывается функция обратного вызова, и это функция обратного вызова, которая должна соответствовать этой спецификации.
По этой спецификации прослушиватель событий вызывает обработчик с объектом события в качестве первого аргумента. Всегда! Это означает, что функции обработчика событий должны быть записаны с пониманием того, что первым аргументом всегда будет объект события. То, что обработчик события называет этим аргументом, полностью зависит от обработчика события, поскольку это имя является лишь локальной ссылкой на объект в любом случае.
То, что ожидает обработчик событий, на самом деле совершенно не имеет отношения к слушателю, который его вызывает, он не знает и не заботится. Другими словами, даже если обработчик ожидает более одного аргумента, эти другие аргументы будут не определены, когда обработчик будет вызван, если слушатель также не передаст больше аргументов, чем только объект события.