Клиентский JavaScript 1.3 Руководство

         

Использование функции-конструктора



Использование функции-конструктора

Альтернативно можно создавать объект в два этапа:

  1. Определить тип объекта, написав функцию-конструктор.

  2. Создать экземпляр объекта с помощью операции new.

Для того чтобы определить тип объекта, создайте функцию для типа объекта, которая специфицирует имя, свойства и методы. Например, Вы хотите создать тип объекта для автомобилей/cars. Вы называете тип объекта car и хотите, чтобы у него были свойства make, model, year и color. Для реализации этого Вы должны написать следующую функцию:

function car(make, model, year) {
   this.make = make
   this.model = model
   this.year = year
}

Обратите внимание на использование this для присвоения значений свойствам объекта на основе значений, передаваемых в функцию.

Теперь Вы можете создать объект mycar:

mycar = new car("Eagle", "Talon TSi", 1993)

Этот оператор создаёт объект mycar и присваивает специфицированные значения его свойствам. Тогда значением mycar.make будет строка "Eagle", mycar.year это целое число 1993 и так далее.

Вы можете создать любое количество объектов car через вызов new. Например,

kenscar = new car("Nissan", "300ZX", 1992)
vpgscar = new car("Mazda", "Miata", 1990)

Объект может иметь свойство, которое само является объектом. Например, Вы определяете объект person:

function person(name, age, sex) {
   this.name = name
   this.age = age
   this.sex = sex
}

и инстанциируете два новых person-объекта:

rand = new person("Rand McKinnon", 33, "M")
ken = new person("Ken Jones", 39, "M")

Затем Вы можете переписать определение car и включить в него свойство owner, которое принимает person-объект:

function car(make, model, year, owner) {
   this.make = make
   this.model = model
   this.year = year
   this.owner = owner
}

Теперь можно инстанциировать новые объекты:

car1 = new car("Eagle", "Talon TSi", 1993, rand)
car2 = new car("Nissan", "300ZX", 1992, ken)

Обратите внимание, что вместо передачи литеральной строки или целочисленного значения при создании новых объектов, эти операторы передают объекты rand и ken как аргументы для owner. Затем, если Вы хотите вычислить имя владельца автомобиля car2, Вы можете получить доступ к следующему свойству:

car2.owner.name

Заметьте, что Вы всегда можете добавить свойство к ранее определённому объекту. Например, оператор

car1.color = "black"

добавляет свойство color объекту car1 и присваивает ему значение "black." Однако это не влияет на все другие объекты. Для добавления свойства всем объектам данного типа Вы должны добавить свойство в определение типа объекта car.



Содержание раздела