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

2.1.3. Об'єкти на базі класів, утворюваних програмістом

Клас JavaScript створюється як функція, у якій визначені властивості, що грають роль даних. Що ж стосується методів, то вони теж визначаються як функції, але окремо.

Нехай потрібно створити клас, призначений для збереження запису уявлюваної телефонної бази даних. У цьому класі потрібно передбачити властивості для збереження імені, прізвища, номера телефону, адреси, а також спеціальної ознаки для записів, закритих від несанкціонованого доступу. Додатково потрібно розробити методи, призначені для відображення вмісту об'єкта в табличному виді.

Насамперед треба зайнятися створенням власного класу з назвою myRecord. Нехай поки в ньому не буде методів, додамо їх пізніше.

Шуканий клас створюється в такий спосіб:

function myRecord(name, family, phone, address)

{

this.name = name;

this.family = family;

this.phone = phone;

this.address = address;

this. secure = false;

}

Опис класу є не що інше, як функція конструктора. Параметри конструктора призначені для установки властивостей об'єкта при його створенні на базі класу.

Властивості визначаються простими посиланнями на їхні імена з указівкою ключового слова this. Це ключове слово тут указує, що в операторі виконується посилання на властивості того об'єкта, для якого викликаний конструктор, тобто для утворюваного об'єкта.

Конструктор инициализирует властивість з ім'ям secure, записуючи в нього значення false. Відповідний параметр у конструкторі не передбачений, що цілком припустимо.

На базі цього класу можна створити довільну кількість об'єктів. Нижче приведений фрагмент сценарію JavaScript, де на базі класу myRecord створюється два об'єкти: reс1 і гес2:

var reс1;

var гес2;

reс1 = new myRecord("Іван", "Іванов",

"000-322-223", "Мала Велика вул., д. 225, кв. 226");

гес2 = new myRecord("Петро", "Петров",

"001-223-3334", "Велика Мала вул., д. 552, кв. 662");

гес2. secure = true;

Об'єкти створюються за допомогою оператора new. Тут передаються конструктору параметри для ініціалізації властивостей утворюваних об'єктів.

У об'єкті гес2 властивості з ім'ям secure инициализируется вже після створення останнього. У нього записується значення true. Властивість secure об'єкта reс1 не змінювалося, тому в ньому зберігається значення false.

Така задача - додавання у визначений нами клас нових методів з іменами printTableHead, printTableEnd і printRecord. Перші два з цих методів виводять у документ HTML відповідно початковий і кінцевий фрагмент таблиці, а третій - рядки таблиці, що відбивають уміст записів.

У скороченому виді нове визначення класу myRecord подано нижче:

function printTableHead()

{

...

}

function printTableEnd()

{

...

}

function printRecord()

{

...

}

function myRecord(name, family, phone, address)

{

this.name = name;

this.family = family;

this.phone = phone;

this.address = address;

this.secure = false;

this.printRecord = printRecord;

this.printTableHead = printTableHead;

this. printTableEnd = printTableEnd;

}

Тут перед визначенням конструктора розташовані визначення для функцій-методів класу. Крім того, у конструктор доданий визначення нових властивостей:

this.printRecord = printRecord;

this. printTableHead = printTableHead;

this. printTableEnd = printTableEnd;

Ці властивості бережуть посилання на методи, визначені вище. Після такого визначення класу можна створювати об'єкти й обертатися до визначених методів:

rec1.printTableHead();

rec1.printRecord();

rec1. printTableEnd();

гес2.printTableHead();

гес2.printRecord();

гес2. printTableEnd()

;

Повертаючись до документа призведемо його повний вихідний текст (листинг 2.2).

Листинг 2.2. Файл chapter2/NewObject/NewObject. html

<HTML>

<HEAD>

<Т1ТLЕ>Перегляд записів</Т1ТLЕ>

<SCRIPT LANGUAGE="JavaScript">

<!--

function printTableHead()

{

var szSec = "";

if(this.secure)

szSec = "(Secure)";

else

szSec = "(Unsecure)".fontcolor("red");

document.write("<TABLE BORDER>");

document.write("<CAPTION ALIGN=LEFT>" +

this.name + " " + this.family + szSec +

"</CAPTION>");

document .write ("<TH ALIGN=LEFT>Полe запису</ТН>"

+ "<TH АLIGN=LЕFT>Вміст</ТН>");

}

function printTableEnd()

{

document.write("</TABLE>");

document.write("<P>");

}

function printRecord()

{

document.write ("<TR><TD>Name :</TD><TD>" +

this. name. italics () + "</TD></TR>");

document.write ("<TR><TD>Family: </TD><TD>" +

this.family.italics() + "</TD></TR>" ) ;

document.write ("<TR><TD>Phone:</TD><TD>" +

this.phone.italics () + "</TD></TR>") ;

document.write ("<TR><TD>Address : </TD><TD>" +

this. address. italics () + "</TD></TR>") ;

}

function myRecord(name, family, phone, address)

{

this.name = name;

this.family = family;

this.phone = phone;

this.address = address;

this.secure = false;

this.printRecord = printRecord;

this.printTableHead = printTableHead;

this.printTableEnd = printTableEnd;

}

//-->

</SCRIPT>

</HEAD>

<BODY BGCOLOR=WHITE>

<H1>Перегляд записів</Н1>

<SCRIPT LANGUAGE="JavaScript">

<!--

var rec1;

var rec2;

rec1 = new myRecord("Іван", "Іванов",

"000-322-223", "Мала Велика вул., д. 225, кв. 226");

rec2 = new myRecord("Петро", "Петров",

"001-223-3334", "Велика Мала вул., д. 552, кв. 662");

rec2.secure = true;

rec1.printTableHead();

rec1.printRecord();

rec1. printTableEnd();

rec2. printTableHead();

rec2.printRecord();

rec2.printTableEnd();

//-->

</SCRIPT>

</BODY>

</HTML>

Визначення нового класу myRecord і його методів розташовані в області заголовка документа HTML, як це прийнято робити.

Метод printTableHead виводить у документ HTML заголовок таблиці. Зовнішній вигляд цього заголовка залежить від умісту властивостей об'єкта.

Насамперед метод printTableHead перевіряє властивість secure, одержуючи його значення за допомогою ключового слова this:

var szSec = "";

if(this.secure)

szSec = " (Secure)";

else

szSec = " (Unsecure)". fontcolor ("red");

Тут це ключове слово означає, що необхідно використовувати властивість того об'єкта, для якого був викликаний метод printTableHead.

Якщо уміст властивості secure дорівнює true, у текстову перемінну szSec записується рядок " (Secure)". Якщо ж воно дорівнює false, у цю перемінну заноситься рядок "(Unsecure)", причому для рядка встановлюється червоний цвіт.

Тому що в JavaScript усі текстові рядки (у тому числі і литералы) є об'єктами умонтованого класу String, те для них можна викликати визначені в цьому класі методи. Зокрема, метод fontcolor дозволяє установити цвіт рядка, чим і скористалися.

Далі метод printTableHead виводить у документ HTML оператор <TABLE> із параметром BORDER, із якого починається визначення таблиці, що має рамку. Напис над таблицею задається за допомогою динамічно формованого оператора <CAPTION>. У цей напис включається ім'я і прізвище, витягнуті з відповідних властивостей об'єкта, для "який був викликаний метод printTableHead. Потім цей метод виводить напису для стовпчиків таблиці.

Метод printTableEnd виводить у документ HTML оператор </TABLE>, що завершує визначення таблиці, а також порожній параграф для відділення таблиць, що випливають друг за другом:

function printTableEnd()

{

document.write("</TABLE>");

document. write("<P>");

}

Останній метод, визначений у класі, називається printRecord. Він друкує вміст перших чотирьох властивостей об'єкта як рядок таблиці, визначеної в документі HTML тільки що описаною функцією printTableHead.

Вміст властивостей об'єкта друкується похилим шрифтом, для чого визивається метод italics:

document. write("<TR><TD>Name:</TD><TD>" +

this. name. italics () + "</TD></TR>");

Визначення класу myRecord вже описано вище.

В другій частині сценарію, розташованої в тілі документа HTML, створюються два об'єкти rec1 і гес2 на базі класу myRecord, а потім установлюється властивість secure об'єкта гес2 у стан true.

Далі сценарій послідовно виводить у документ HTML дві таблиці, що відповідають створеним об'єктам, викликаючи для цього методи printTableHead, printRecord і printTableEnd.