-Метки

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в CommandButton

 -Сообщества

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 05.05.2008
Записей:
Комментариев:
Написано: 214


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

Вторник, 17 Марта 2009 г. 21:28 + в цитатник
Мониста все записи автора В предыдущем разделе мы рассмотрели встроенные объекты, то есть заранее предопределенные в JavaScript и часто используемые в программах. С помощью выражений с ключевым словом new вы можете создавать экземпляры этих объектов, то есть их конкретные воплощения. Более того, благодаря свойству prototype имеется возможность добавлять к объектам новые свойства и методы, придуманные пользователем и отсутствовавшие в исходных встроенных объектах. В большинстве случаев, в частности при создании сценариев для Web-страниц, всего этого более чем достаточно. Однако нельзя обойти вниманием возможность создания собственных объектов. Зачем нужны собственные объекты? Они не являются необходимыми для решения практических задач. С точки зрения программиста, объект представляет собой просто удобное средство организации данных и функций их обработки. Чтобы как-то организовать данные и функции в программе, далеко не всегда необходимо прибегать к такой конструкции, как объект. Ведь даже при внушительном количестве данных программист не всегда организует их в виде массива (объекта Array): бывает достаточным ограничиться простыми переменными.
9.1. Создание объекта
Объекты в JavaScript можно создать несколькими способами. Мы рассмотрим три таких способа.

Первый способ основан на функции, в теле которой описываются все свойства и методы создаваемого объекта. Поскольку эта функция играет определяющую роль в создании объекта, ее называют функцией-конструктором или просто конструктором объекта. Что, собственно, должен делать конструктор? Очевидно, он должен ввести имя создаваемого объекта, а также его свойства и методы. Кроме того, он должен допускать возможность присваивания начальных значений свойствам. Имя функции-конструктора объекта является одновременно и именем создаваемого объекта. Свойства и методы создаваемого объекта задаются в теле функции-конструктора с помощью операторов присваивания. При этом имена переменных-свойств записываются с ключевым словом this (этот): this.переменная. Рассмотрим в качестве примера функцию-конструктор, определяющую объект car (автомобиль) со свойствами name (название), model (модель) и color (цвет):

function car(name, model, color) {
this.name = name
this.model = model
this.color = color
}

Эта функция определяет объект car. Чтобы создать конкретный экземпляр объекта car, следует выполнить выражение с вызовом этой функции, которой можно передать значения параметров. Мы уже знаем, что экземпляр объекта создается с помощью оператора присваивания с ключевым словом new:
mycar = new car("Лада", "ВАЗ21099","green")

Итак, мы создали объект mycar, являющийся экземпляром объекта car. Таких экземпляров с различными именами можно создать несколько. Значения свойств объекта mycar можно изменять в программе:

mycar.model // значение равно "ВАЗ21099"
mycar.name // значение равно "Лада"
mycar.model = "ВАЗ2110" // значение равно "ВАЗ2110"

Как видите, объект это просто особый способ группировки данных и их использования (составное имя переменной: объект.свойство).

Объекты можно создавать и с помощью конструктора new Object():

mycar = new Object()
mycar.name = "Лада"
mycar.model = "ВАЗ21099"
mycar.color = "green"

В этом способе отчетливо видно, создаваемый объект является экземпляром объекта Object подобно тому как, например, создаваемый массив является экземпляром объекта Array.
Допускается также и следующая компактная запись определения объекта:
mycar = {name:"Лада", model:"ВАЗ21099", color:"green"}
Здесь все определение свойств заключается в фигурные скобки. Пары свойство-значение разделяются запятыми, а имя свойства отделяется от значения двоеточием.

При создании объекта мы можем задать значения свойств по умолчанию, то есть значения, которые будут иметь свойства, если при создании экземпляра этого объекта значения его свойств не указаны явным образом (то есть имеют значения null, 0 или ""). Это делается с помощью логического оператора ИЛИ (обозначаемого ||) в конструкторе объекта в виде функции:

function car(name, model, color) { // конструктор объекта car
this.name = name || "неизвестно"
this.model = model || "неизвестно"
this.color = color || "black"
}
mycar = new car("Жигули","") // создание экземпляра mycar объекта car
mycar.name // "Жигули"
mycar.model // "неизвестно"
mycar.color // "black"

9.2. Добавление свойств
Если возникает необходимость добавить новое свойство к существующему объекту, а также ко всем его экземплярам, то это можно сделать с помощью свойства prototype. В приведенном ниже примере мы создаем объект car (автомобиль), затем его экземпляр mycar, а затем добавляем к свойству prototype свойство owner (владелец) с конкретным значением:

function car(name, model, color) { // конструктор объекта car
this.name = name || "неизвестно"
this.model = model || "неизвестно"
this.color = color || "black"
}

mycar = new car("Жигули","") /* создание экземпляра mycar объекта car */
mycar.name // "Жигули"
mycar.model // "неизвестно"
mycar.color // "black"
car.prototype.owner = "Иванов" // добавляем новое свойство
mycar.owner // "Иванов"

Если нужно добавить новое свойство только к конкретному объекту (к данному экземпляру объекта), то это можно сделать просто с помощью оператора присваивания:
имяОбъекта.новое_свойство = значение

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

function car(){}
mycar1 = new car()
mycar2 = new car()
mycar1.name = "Жигули"
mycar2.model = "ВАЗ2106"

mycar1.name // "Жигули"
mycar1.model // undefined (не определено)
mycar2.name // undefined (не определено)
mycar2.model // "ВАЗ2106"

9.3. Связанные объекты
В объекте в виде свойства может содержаться ссылка на другой объект. В этом случае оба объекта оказываются связанными: один из них оказывается подобъектом или, другими словами, свойством другого. Например, мы можем создать объект photo, содержащий в качестве своих свойств название автомобиля и URL-адрес файла с его изображением. Такой объект можно связать с объектом car, содержащим основную информацию об автомобилях, добавив к нему свойство, значением которого является ссылка на объект photo.

Ниже приведены конструкторы объектов car и photo. Чтобы добавить объект photo в объект car, мы добавили в объект car свойство, значением которого является ссылка на объект photo.

function car(name, model, color, photo) { /* конструктор объекта car */
this.name = name
this.model = model
this.color = color
this.photo = photo // ссылка на объект photo
}

function photo (name, url) { // конструктор объекта photo
this.name = name
this.url = url
}
Cоздадим пару конкретных объектов, являющихся экземплярами объекта photo:
photo1=new photo("Лада","/images/lada1.jpg")
photo2 =new photo("Лада ","/images/lada2.gif")
Теперь создадим экземпляры объекта car:

mycar = new car("Лада", "ВАЗ21099","white", photo1)
mycar.photo.url // "/images/lada1.jpg"
mycar.model // "ВАЗ21099"

mycar = new car("Ока", "ВАЗ21099","white", photo2)
mycar.photo.url // "/images/lada2.gif"
mycar.model // "ВАЗ21099"

Обратите внимание, чтобы узнать значение URL-адреса расположения файла с картинкой, относящейся к объекту mycar, мы обращаемся к свойству url объекта photo, который сам является свойством объекта mycar или, другими словами, подобъектом объекта mycar.
Рубрики:  программирование
HTML

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку