Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало пути.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
7.81 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) {

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

} else {

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

throw e

}

} finally {

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

}

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

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

<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 или с помощью инициализации;

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

объекты браузера, которые создаются автоматически при загрузке документа: window — объект верхнего уровня в иерархии объектов; location —описывает местонахождение текущего документа; history — содержит информацию о ресурсах, к которым пользователь обращался во время текущего сеанса; navigator — содержит информацию о версии браузера. Кроме этого, имеются объекты frames, screen а также методы setTi­meout() и setInterval().

Объекты, связанные с тэгами HTML и стилями CSS. В соответствии с моделью DOM большинство тэгов HTML и стилей CSS соответствуют свойствам объекта document. Например, document — содержит свойства innerText, innerHTML, textContent, которые относятся к текущему HTML-документу и сами также являются объектами. Методы: getElementById(), getElementByTopName.

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

Объектно-ориентированные языки (например, Java и C++) основаны на базовых понятиях классов объектов и экземпляров (instances) объектов. JavaScript основан на прототипах и в нем есть только объекты. Вверху иерархии находится объект Object с методами toString() и свойством prototype. Прототип объекта определяет некоторый начальный набор свойств объекта. В процессе работы объект может получать новые свойства через прототип и может сам выступать в качестве прототипа при создании новых объектов.

Существует два основных способа создания новых объектов в JavaScript:

  1. Использование конструктора объектов.

  2. Использование инициализатора объекта.

При создании объектов в JavaScript используют специальные методы, называемые конструкторами. Имя конструктора определяет имя класса. Декларация конструктора совпадает с декларацией класса. Иными словами, мы определяем конструктор как функцию, которая создает объекты с заданным начальным набором свойств и их значений. Затем создаем объекты вызовом операции:  new имя_конструктора(). Например:

<DOCTYPE html>

<!-- пример #pr1: шаблон HTML для скрипта -->

<html>

<head>

<title> Объект HTML </title>

</head>

<body >

<script language="javascript" type="text/javascript">

alert("Begin");

function Book() {//конструктор

this.paper = true;

}

var myBook = new Book(); //Объект

alert(myBook.paper); //выведет true

alert("MyBooktype "+typeof(myBook)); //object

alert(Book.prototype); // [object Object]

alert(Object.getPrototypeOf(Book)); //function(){}

alert(Object.getPrototypeOf(myBook)) //[object Object]

for (var i in myBook)

alert('myBook'+i ) //myBook.paper

alert("End");

</script>

</body></html>

Конструктор вызывается с при создании объекта с помощью оператора new. Оператор new создает пустой объект и передает ссылку this на него конструктору. Конструктор может обращаться к создаваемому объекту, используя указатель this, таким образом, мы можем добавить свойство создаваемому объекту. В конструктор можно передавать параметры, чтобы задать начальные свойства создаваемого объекта. Новое свойство объекта создается просто присваиванием ему значения. Имеется только одна копия прототипа, которую используют все объекты, созданные с помощью одного конструктора. Свойства, созданные с помощью прототипа, будут иметь одинаковые значения для всех объектов данного конструктора.

<DOCTYPE html>

<html>

<head>

<title> Объект HTML </title>

</head>

<body >

<script language="javascript" type="text/javascript">

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

if (isPaper) this.paper = true;

else this.paper = false;

this.name = name; this.version = version;

this.aboutBook = function() {

document.write("Book: " + this.name + " " + this.version); }

}

var myBook = new Book(true, "Programming","3");

myBook.price = 100;//добавление свойства объекту

Book.prototype.benifit = 20;// добавление свойства прототипу объект

alert(myBook.aboutBook); //выведет function(){…..}

alert(myBook.price); //100

alert(myBook.benifit)//20

alert(Object.getPrototypeOf(Book));// function(){}

alert(Object.getPrototypeOf(myBook));//[object Object]

var myBook1 = new Book(false, "Progr","5");

alert(myBook1.price); //undefined

alert(myBook1.benifit)//20

for (var i in myBook1)//отсутствует price

alert('myBook1'+i )//paper, name,version, aboutbook, benifit

</script>

</body></html>

Свойство price добавлено только для объекта myBook, а свойство benefit для всего прототипа. Свойство, являющееся функцией, называется методом.

Объект JavaScript представляет набор свойств, образующих ассоциированный массив. Для доступа к свойству объекта используется синтаксис: имя_объекта.имя_свойства. Если название свойства задано текстовой строкой, то доступ к свойству возможен и так: имя_объекта["имя_свойства"]

Мы можем удалить свойство или ранее созданный объект с помощью операции delete, например: delete myBook;