Использование Конструктора Функции
Альтернативно Вы можете создать объект в два этапа:
Определить тип объекта, написав конструктор функции.
Чтобы определить тип объекта, создайте функцию для типа объекта, которая специфицирует его имя , свойства и методы. Например, предположим, Вы хотите создать тип объекта для автомобилей и назвать его 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.