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

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

Объекты являются элементами технологии Объектно Ориентированного Программирования (ООП). В Java или C++ объекты являются элементами классов. Классы несут в себе такие свойства как инкапсуляция, наследование и полиморфизм. В JavaScript используются объекты с прототипами, которые не являются полноценнымы элементами ООП. Рассмотрим основные виды объектов:

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

встроенные объекты: String – строка; Array – массив; Date – дата и время; Math – математические функции. Кроме этого, стандарт ECMAScript поддерживает объекты Boolean, Number, Global, Object, RegExp;

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

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

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

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

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

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

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

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

<DOCTYPE html>

<!-- Пример pr20: object -->

<html> <head>

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

</head>

<body >

<script type="text/javascript">

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 Empty(){}

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

for (var i in myBook)

alert('myBook'+i ) //myBookpaper

</script>

</body></html>

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

<DOCTYPE html>

<html> <head>

<title> pr21: Объект </title>

</head><body >

<script 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

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

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

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

alert("price "+myBook.price); //100

alert("benifit "+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 – для всего прототипа. Свойство-функция называется методом.

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