Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в Веб программирование.doc
Скачиваний:
81
Добавлен:
07.11.2018
Размер:
4.42 Mб
Скачать

Исключения: throw/catch/finally

Работа с исключениями в JavaScript организована, как и в C++ или Java:

try {

//...

throw {message: "err!"}

//..

}

catch (e) {

alert("Ошибка!"+e)

}

Блок try{} указывает выполнить код внутри блока. В случае ошибки осуществляется выход из этого блока и переход на блок обработки исключений:

catch (e) {}

Оператор throw {} генерирует объект – исключение, после чего осуществляется выход из блока try. Обычно при этом генерируются потомки встроенного класса Error:

throw new Error("server timeout")

Часто при перехвате исключений надо перехватить определенный класс исключений. Оператор catch такого не умеет, поэтому полный код обработки будет выглядить так:

try {

// код ...

} catch(e) {

// ловим нужное исключение

if (e instanceof ConnectionError) {

// обрабатываем его

//reconnect …

} else {

// пробрасываем незнакомое исключение дальше

throw e

}

} finally {

// блок finally выполняется всегда,

// вне зависимости - было исключение или нет

}

В этом примере присутствует блок finally, взятый в javascript из java. В стандартной схеме try..catch..finally, код в finally выполнится при любом результате работы try/catch, и туда удобно ставить всякие очистки, уведомления о конце процесса.

<!-- пример pr16 -->

<html>

<head>

<title>Наша начальная страница</title>

</head>

<body>

<script type="text/javascript">

function showErrorInfo(e) {

document.write(e, ":<BR>");

document.write("Источник ошибки: ", (e.number >> 16) & 0x1FFF, "<BR>");

document.write("Номер ошибки: ", e.number & 0xFFFF, "<BR>");

document.write("Описание ошибки: ", e.description);

}

var x;

try {

x = y; // Ошибка: переменная y не определена

}

catch (e) { // Создает локальный объект e класса Error

showErrorInfo(e);

}

</script>

</body>

</html>

Будет выведено:

[objectError]: Источник_ошибки:10 Номер_ошибки:5009 Описание ошибки: 'y' - определение отсутствует

Объектная модель

В JavaScript используются следующие виды объектов:

  • пользовательские объекты, которые создаются пользователями с помощью конструктора и объекта Object; Object — содержит конструктор для создания пользовательских объектов;

  • встроенные объекты языка JavaScript: String — строка; Array — массив; Date — дата и время; Math — математические функции; объекты браузера — создаются автоматически при загрузке документа в браузер:

  • window — объект верхнего уровня в иерархии объектов браузера; document — содержит свойства, которые относятся к текущему HTML-документу; location — содержит свойства, описывающие местонахождение текущего документа, например, адрес URL; history — содержит информацию обо всех ресурсах, к которым пользователь обращался во время текущего сеанса; navigator — содержит информацию о версии браузера;

  • объекты, связанные с тэгами HTML и стилями CSS — в соответствии с моделью DOM большинству тэгов HTML и стилей CSS соответствуют свойства объекта document, которые сами также являются объектами;

Пользовательские объекты

Для создания пользовательского объекта используется конструктор, который определяет вид объекта и его поведение. Конструктор представляет собой функцию и может иметь вид:

function Book() {

}

Тогда создание экземпляра объекта типа book будет иметь вид:

var myBook = new Book();

Конструктор может обращаться к создаваемому объекту, используя указатель this, таким образом, мы можем добавить свойство создаваемому объекту:

function Book() {

this.paper = true;

}

var myBook = new Book();

alert(myBook.paper); //выведет на экран true

В конструктор можно передавать параметры, чтобы задать начальные свойства создаваемого объекта.

function Book(isPaper) {//конструктор с параметрами

if (isPaper) this.paper = true;

else this.paper = false;

}

var myBook = new Book(false);

alert(myBook.paper); //выведет на экран false