1.5 Объекты. Модель объекта.
JavaScript основан на простой объектно-ориентируемой парадигме. Объект
строят со свойствами, которые являются переменными JavaScript или другими
объектами. Объект также имеет функции, связанные с ним, которые называются
методами объекта. В дополнение к объектам, которые встроены в Navigator
клиента и LiveWire server, можно определить свои собственные объекты.
1.5.1 Объекты и свойства.
Свойства объектов JavaScript доступны следующим образом:
NameObject.Property
где NameObject- имя объекта, Property - его свойство.
Предположим имеется объект с именем department(отдел). Можно определить
свойства этого объекта:
название(name),
руководитель(chief),
число сотрудников(number_of_workers) следующим образом:
department.name = "rk6"
department.chief = "Norenkov I.P."
department.number_of_workers = 23;
Второй способ доступа к свойствам - через массивы. Свойства и массивы
в JavaScript - довольно близки, фактически они представляют собой различные
интерфейсы к одной и той же структуре данных. Так, например, можно определить
свойства объекта department следующим образом:
department["name"] = "rk6"
department["chief"] = "Norenkov I.P."
department["number_of_workers "] = 23
Этот тип массива известен как ассоциативный, потому что каждый индекс
является строкой. Следующая функция выводит свойства объекта, когда ей
передается объект и имя объекта в качестве аргументов.
function show_props(obj, obj_name) {
var result = ""
for (var i in obj)
result += obj_name + "." + i + " = " + obj[i] + "\n"
return result
}
Так функция, show_props(department, "department") выведет
следующий результат: department.name = rk6
department.chief = Norenkov I.P.
department.number_of_workers = 23
1.5.2 Создание новых объектов.
И клиент и сервер JavaScript имеют набор предопределенных объектов.
Кроме этого, есть возможность создавать свои собственные объекты, для этого
необходимо:
1. Определить тип объекта с помощью конструктора.
2. Создать экземпляр объекта с помощью оператора new.
Для того, чтобы определить тип объекта, создается функция, в которой
определяется имя, свойства, и методы объекта. Например, предположим, что
мы хотим создать объект типа отдел. Мы хoтим, чтобы он назывался department
и имел свойства - название(name), руководитель(chief), число сотрудников(number_of_workers)
и тема над которой работает отдел(theme). Функция будет выглядеть следующим
образом:
function department(name, chief, number_of_workers, theme)
{ this.name = name
this.chief = chief
this.number_of_workers = number_of_workers
}
Заметим, что значения свойств объекта определяются значениями, переданными
функции. Теперь создадим объект типа department с именем ourdep:
ourdep = new department("rk6", "Norenkov I.P.", 23)
В том операторе объекту ourdep назначаются следующие свойства: ourdep.name
присваивается строковое значение "rk6", ourdep. number_of_workers
- целое 23 и т.д. Можно создать любое количество таких объектов, еще один
пример: iu6dep = new department("iu6", "Smirnov U.M",
34). Объект может иметь свойства, которые являются свойствами другого объекта.
Предположим мы определяем объект person:
function person(name, age, sex) {
this.name = name
this.age = age
this.sex = sex
}
и создаем два экземпляра этого объекта:
fed = new person("Fedoruk V.G.", 43, "M")
trudon = new person("Trudonoshin V.A.", 46, "M")
Теперь мы хотим переопределить объект department, чтобы он включал новое
свойство - сотрудников:
function department(name, chief,number_of_workers, collab)
{ this.name = name
this.chief = chief
this.number_of_workers = number_of_workers
this.collab =collab }
Создаем новые объекты типа department:
ourdep = new department("rk6", "Norenkov I.P.",
23,trudon)
iu6dep = new department("iu6", "Smirnov U.M", 34,fed)
Можно обратить внимание, что при создании объектов типа department,
им в качестве аргументов передаются имена объектов. Теперь, если мы хотим
найти имя сотрудника отдела iu6, то можем воспользоваться следующей записью:
iu6.collab.name
Заметим, что всегда можно добавить свойства к ранее определенному объекту,
например оператор rk6.theme = "rk6-07" добавит свойство theme
к rk6, и назначит ему значение "rk6-07". Однако это не повлияет
на другие объекты, для добавления новых свойств ко всем объектам данного
типа необходимо изменить определение объекта.
1.5.3 Использование индексов для свойств объекта.
В Navigator 2.0, можно обратиться к свойствам объекта по их названию
или по их порядковому индексу. В Navigator3.0, если первоначально свойство
определено с помощью названия, то при обращении к нему нужно использовать
название, если первоначально воспользовались индексом, то и обращение должно
быть с индексом. Исключением из этого правила - объекты типа form, к ним
можно обратиться как к элементу массива в соответствии с их порядковым
номером (он определяется порядком появления формы в документе) или по имени.
Например, если второй тег <FORM> в документе имеет аттрибут NAME
"myForm", можно обратиться к этой форме двумя способами:
document.forms[1]
document.forms["myForm"]
1.5.4 Определение свойств объекта по умолчанию.
Используя свойство prototype можно назначать свойства всем представителям
данного типа, после этого их можно индивидуально переопределить. В следующем
примере имена всех руководителей отделов (объект типа department) определяется
как null, затем они могут быть изменены
department.prototype.chief=null
[ Оглавление ] [ Дальше ]
|