Использование функции-конструктора
Альтернативно можно создавать объект в два этапа:
Определить тип объекта, написав функцию-конструктор.
Создать экземпляр объекта с помощью операции 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.