Похоже, вы говорите об объекте события, а не о событиях в целом.
В javascript собственным объектом является объект, предоставленный реализацией ECMAScript или созданный с помощью кода ECMAScript (например, function fred(){}
, var obj = {}
). Все остальное предоставляется хост-средой и, следовательно, является хост-объектом (например, окном, элементами DOM).
Следовательно, объект события является хост-объектом, а не объектом «нативного JavaScript».
Разумный подход в большинстве сред программирования - беспокоиться только о вещах, которые непосредственно влияют на разрабатываемую программу. Эта стратегия приводит только к «исправлению» объектов событий, когда их несоответствия влияют на определенные части кода. Не имеет смысла беспокоиться о свойствах, которые не используются, чьи несоответствия не влияют на написанную программу или которые не применимы к конкретному событию (например, каково значение pageX для события загрузки и почему если оно будет установлено в 0, а не в undefined ).
Вид программирования, в котором каждое возможное несоответствие записывается в одну функцию, приводит к программированию культа груза , где причина для выполнения определенных действий (если когда-либо была веская причина для их выполнения вообще) теряется, и они увековечены просто потому, что они существуют в некой «наилучшей» версии «кроссбраузерного» кода.
Например, кто-нибудь помнит, какие версии Safari устанавливают свойство target для текстовых узлов, если они были целью события? Если нет, и такой браузер не используется, почему он все еще находится в таком коде?
Если он включен, потому что какой-то будущий браузер может также делать цели событий текстовыми узлами, и по какой-то причине решено, что цели событий всегда должны быть элементами (или, по крайней мере, узлами, которые реализуют интерфейс элемента), тогда не будет разумнее будет сделать:
if (this.target.nodeType != 1 && this.target.parentNode) {
this.target = this.target.parentNode;
}
как более общее исправление вероятности того, что цель события не является элементом?
При каких обстоятельствах будет event.srcElement == false
, и почему он должен быть задан для узла документа, а не для элемента body или head ?