Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Исторически сложилось так, что обработчику события

опеrror
объекта
Window
передается три строковых аргумента, а не единственный объект события, как в других обработчиках. (Другие объекты в клиентском JavaScript также имеют обработчики
onerror
, обрабатывающие различные ошибочные ситуации, но все они являются обычными обработчиками событий, которым передается единственный объект события.) Первый аргумент обработчика
window.опеrror
– это сообщение, описывающее произошедшую ошибку. Второй аргумент - это строка, содержащая URL-адрес документа с JavaScript-кодом, приведшим к ошибке. Третий аргумент - это номер строки в документе, где произошла ошибка.

Помимо этих трех аргументов важную роль играет значение, возвращаемое обработчиком

опеrror
. Если обработчик
опеrror
возвращает
true
, это говорит броузеру о том, что ошибка обработана и никаких дальнейших действий не требуется; другими словами, броузер не должен выводить собственное сообщение об ошибке. К сожалению, по историческим причинам в Firefox обработчик ошибок должен возвращать true, чтобы сообщить о том, что ошибка обработана.

Обработчик

оnеrror
является пережитком первых лет развития JavaScript, когда в базовом языке отсутствовала инструкция
try/catch
обработки исключений. В современном программном коде этот обработчик используется редко. Однако на время разработки вы можете определить свой обработчик ошибок, как показано ниже, который будет уведомлять вас о всех происходящих ошибках:

// Вывести сообщение об ошибке в виде диалога, но не более 3 раз

window.опеrror = function(msg, url, line) {

if (опеrror.num++ < опеrror.max) {

alert("ОШИБКА: " + msg + "\n" + url + + line):

return true;

}

}

опеrror.max = 3;

опеrror.num = 0;

14.7. Элементы документа как свойства окна

Если для именования элемента в HTML-документе используется атрибут

id
и если объект
Window
еще не имеет свойства, имя которого совпадает со значением этого атрибута, объект Window получает неперечислимое свойство с именем, соответствующим значению атрибута
id
, значением которого становится объект
HTMLElement
, представляющий этот элемент документа.

Как вы уже знаете, объект

Window
играет роль глобального объекта, находящегося на вершине цепочки областей видимости в клиентском JavaScript. Таким образом, вышесказанное означает, что атрибуты
id
в HTML-документах становятся глобальными переменными, доступными сценариям. Если, например, документ включает элемент
<button id='okay”/>,
на него можно сослаться с помощью глобальной переменной
okay
.

Однако важно отметить, что этого не происходит, если объект

Window
уже имеет свойство с таким именем. Элементы с атрибутами
id
, имеющими значение
«history», «location»
или
«navigator»,
например, не будут доступны через глобальные переменные, потому что эти имена уже используются. Аналогично, если HTML-документ включает элемент с атрибутом
id
, имеющим значение «х» и в сценарии объявляется и используется глобальная переменная х, явно объявленная переменная скроет неявную переменную, ссылающуюся на элемент. Если переменная объявляется в сценарии, который в документе находится выше именованного элемента, наличие переменной будет препятствовать появлению нового свойства окна. А если переменная объявляется в сценарии, который находится ниже именованного элемента, первая же инструкция присваивания значения этой переменной затрет значение неявно созданного свойства.

В разделе 15.2 вы узнаете, что с помощью метода

document.getElementByld
можно отыскивать элементы документа по значениям их HTML-атрибутов
id
. Взгляните на следующий пример:

var ui = ["input","prompt","heading"]; // Массив идентификаторов элементов

ui.forEach(function(id) { // Отыскать элемент для каждого id

ui[id] = document.getElementById(id); // и сохранить его в свойстве

});

После выполнения этого фрагмента свойства

ui.input, ui.prompt
и
ui.heading
будут ссылаться на элементы документа. Вместо
ui.input
и
ui.heading
сценарий мог бы использовать глобальные переменные input и heading. Но, как вы помните из 14.5, объект
Window
имеет метод с именем
prompt,
поэтому сценарий не сможет использовать глобальную переменную
prompt
вместо свойства
ui.prompt
.

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

Window
, что нарушит работу любого программного кода, использующего неявно определяемое свойство с этим именем. Поиск элементов лучше выполнять явно, с помощью метода
document.getElementById.
А его использование будет менее трудоемким, если дать ему более короткое имя:

Поделиться:
Популярные книги

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Прапорщик. Назад в СССР. Книга 6

Гаусс Максим
6. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 6

Подросток

Достоевский Федор Михайлович
Проза:
русская классическая проза
9.09
рейтинг книги
Подросток

Драконы

Мартин Джордж Р.Р.
Фантастика:
фэнтези
8.08
рейтинг книги
Драконы

Изгой

Майерс Александр
2. Династия
Фантастика:
фэнтези
попаданцы
рпг
аниме
5.00
рейтинг книги
Изгой

Убей героя

Кудрявцев Леонид Викторович
Фантастика:
детективная фантастика
5.00
рейтинг книги
Убей героя

Полигон

Гостева Ирина
S.T.A.L.K.E.R.
Фантастика:
боевая фантастика
7.78
рейтинг книги
Полигон

Властелин Севера

Корнуэлл Бернард
3. Саксонские хроники
Приключения:
исторические приключения
8.67
рейтинг книги
Властелин Севера

Темный Лекарь 9

Токсик Саша
9. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Темный Лекарь 9

Эпоха Опустошителя. Том VI

Павлов Вел
6. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том VI

Эпоха Опустошителя. Том I

Павлов Вел
1. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том I

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Лейтенант. Назад в СССР. Книга 8. Часть 1

Гаусс Максим
8. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Лейтенант. Назад в СССР. Книга 8. Часть 1