Помогите разобраться в теории( java script)
Задача: Написать простой прототип системы регистрации пользователей. Для этого используйте две функции-конструктора:
User, которая создает объект типа «пользователь» со следующими свойствами: { // имя firstName: ‘', // фамилия lastName: '’, // дата и время регистрации regDate: ''}. Объекты типа User предназначены для сохранения каждой отдельной записи о пользователе.
UserList, которая создает объект типа “список пользователей” со следующими свойствами и методами: { // внутреннее свойство-массив, в которое будут попадать объекты типа User users: [], // метод получает в качестве параметра объект типа User и сохраняет его в массив users add: function(user) {}, // метод возвращает список пользователей из массива users getAllUsers: function() {}}. Объекты типа UserList предназначены для хранения множества записей типа User.
При запуске программы должно происходить:
Создавать новый экземпляр объекта UserList (с пустым свойством-массивом users).
Открываться диалог prompt с предложением ввести имя и фамилию пользователя для регистрации (одной строкой через пробел).
После нажатия ОК должен создаваться новый экземпляр объекта User с заполнением свойств firstName, lastName и regDate (текущая дата и время).
Созданный экземпляр объекта должен сохраняться в свойство-массив users созданного ранее объекта типа UserList (при помощи метода add).
Диалог prompt должен повторяться, пока пользователь не нажмет “Отмена”.
После нажатия «Отмена» выведите на экран (в консоль или при помощи alert) список всех пользователей с именами и датами регистрации (используйте для этого метод getAllUsers)
Решение:
(function(w, d, u, n) {
var opObj = {
User: function User(options) {
this.firstName = options.firstName;
this.lastName = options.lastName;
this.regDate = new Intl.DateTimeFormat("ru", {
hour: "numeric",
minute: "numeric",
second: "numeric",
weekday: "long",
year: "numeric",
month: "long",
day: "numeric"
}).format(new Date());
},
UserList: function UserList() {
this.users = [];
this.add = function(user) {
this.users.push(user);
};
this.getAllUsers = function() {
return this.users;
}
},
promptName: 'default'
}
var UList = new opObj.UserList();
while(opObj.promptName !== null) {
opObj.promptName = prompt('Введите данные юзверя,\nв формате имя-пробел-фамилия (без знака -).\nДля отмена ввода нажмите ESC или ОТМЕНА(CANCEL)');
if (opObj.promptName !== null &&
(opObj.promptName.trim() !== '' &&
opObj.promptName.split(' ').length === 2)) {
UList.add(new opObj.User({
firstName: opObj.promptName.trim().split(' ')[0],
lastName: opObj.promptName.trim().split(' ')[1],
}));
}
}
console.clear();
UList.getAllUsers().forEach(function(e, i) {
console.log(i + 1 + '. ' + e.lastName + ' ' + e.firstName + ' ' + e.regDate)
});
})(window,document,undefined,null);
Не понимаю решение с точки зрения теории скрипта. Объект сохраняется по ссылке. В задаче во время каждой итерации мы создаем объект типа User, при чем объект с тем же именем. Мы лишь переопределяем его свойства( за счет разных имен), но при этом в массиве хранятся ссылки на разные объекты. Объясните чего я не понимаю в теории скрипта? В моем понимании во время каждой итерации значение в ссылке меняется, следовательно предыдущие значения(объекты) в массиве users также должны меняться в соответствии с последней ссылкой