// ДЗ: Функции // задание 1 Arrow to Functions { // выполнено в предыдущем дз по функциям } // задание 2 createPerson { function createPerson(name, surname) { const person = { name, surname, getFullName() { return `${this.name} ${this.surname} ${this.fatherName || ''}`; }, }; return person; } } // задание 3 createPersonClosure { function createPersonClosure(name, surname) { let fatherName; let age; function getName() { return name; } function getSurname() { return surname; } function getFatherName() { return fatherName; } function getAge() { return age; } function getFullName() { return `${name} ${surname} ${fatherName || ''}`; } function setName(newName) { if (typeof newName === 'string' && newName[0] === newName[0].toUpperCase()) { name = newName; return name; } return name; } function setSurname(newSurname) { if (typeof newSurname === 'string' && newSurname[0] === newSurname[0].toUpperCase()) { surname = newSurname; return surname; } return surname; } function setFatherName(newFatherName) { if ( typeof newFatherName === 'string' && newFatherName[0] === newFatherName[0].toUpperCase() ) { fatherName = newFatherName; return fatherName; } return fatherName; } function setAge(newAge) { if (typeof newAge === 'number' && newAge >= 0 && newAge <= 100) { age = newAge; return age; } return age; } function setFullName(newFullName) { const parts = newFullName.split(' '); if (parts.length === 3) { if ( typeof parts[0] === 'string' && parts[0][0] === parts[0][0].toUpperCase() && typeof parts[1] === 'string' && parts[1][0] === parts[1][0].toUpperCase() && typeof parts[2] === 'string' && parts[2][0] === parts[2][0].toUpperCase() ) { surname = parts[0]; name = parts[1]; fatherName = parts[2]; } } else if (parts.length === 2) { if ( typeof parts[0] === 'string' && parts[0][0] === parts[0][0].toUpperCase() && typeof parts[1] === 'string' && parts[1][0] === parts[1][0].toUpperCase() ) { surname = parts[0]; name = parts[1]; } } return getFullName(); } return { getName, getSurname, getFatherName, getAge, getFullName, setName, setSurname, setFatherName, setAge, setFullName, }; } } // задание 4 createPersonClosureDestruct { function createPersonClosureDestruct({ name = 'Имя не указано', surname = 'Фамилия не указана', age = 0, fatherName, }) { let ageValue = age; let fatherNameValue = fatherName; function getName() { return name; } function getSurname() { return surname; } function getFatherName() { return fatherNameValue; } function getAge() { return ageValue; } function getFullName() { return `${name} ${surname} ${fatherNameValue || ''}`; } function setName(newName) { if (typeof newName === 'string' && newName[0] === newName[0].toUpperCase()) { name = newName; return name; } return name; } function setSurname(newSurname) { if (typeof newSurname === 'string' && newSurname[0] === newSurname[0].toUpperCase()) { surname = newSurname; return surname; } return surname; } function setFatherName(newFatherName) { if ( typeof newFatherName === 'string' && newFatherName[0] === newFatherName[0].toUpperCase() ) { fatherNameValue = newFatherName; return fatherNameValue; } return fatherNameValue; } function setAge(newAge) { if (typeof newAge === 'number' && newAge >= 0 && newAge <= 100) { ageValue = newAge; return ageValue; } return ageValue; } function setFullName(newFullName) { const parts = newFullName.split(' '); if (parts.length === 3) { if ( typeof parts[0] === 'string' && parts[0][0] === parts[0][0].toUpperCase() && typeof parts[1] === 'string' && parts[1][0] === parts[1][0].toUpperCase() && typeof parts[2] === 'string' && parts[2][0] === parts[2][0].toUpperCase() ) { surname = parts[0]; name = parts[1]; fatherNameValue = parts[2]; } } else if (parts.length === 2) { if ( typeof parts[0] === 'string' && parts[0][0] === parts[0][0].toUpperCase() && typeof parts[1] === 'string' && parts[1][0] === parts[1][0].toUpperCase() ) { surname = parts[0]; name = parts[1]; } } return getFullName(); } return { getName, getSurname, getFatherName, getAge, getFullName, setName, setSurname, setFatherName, setAge, setFullName, }; } } // задание 5 isSorted { function isSorted(...values) { if (values.length === 0) { return true; } for (let i = 1; i < values.length; i++) { if (typeof values[i] !== 'number' || values[i] < values[i - 1]) { return false; } } return true; } } // задание 6 Test isSorted { const values = []; while (true) { const value = prompt('Введите число или нажмите ОК, чтобы закончить ввод'); if (value === null) { break; } values.push(Number(value)); } console.log(isSorted(...values)); } // задание 7 personForm { function personForm(parent, person) { // создаем поля ввода const nameInput = document.createElement('input'); const surnameInput = document.createElement('input'); const fatherNameInput = document.createElement('input'); const ageInput = document.createElement('input'); const fullNameInput = document.createElement('input'); // добавляем поля ввода в родительский элемент parent.appendChild(nameInput); parent.appendChild(surnameInput); parent.appendChild(fatherNameInput); parent.appendChild(ageInput); parent.appendChild(fullNameInput); // устанавливаем начальные значения полей ввода nameInput.value = person.getName(); surnameInput.value = person.getSurname(); fatherNameInput.value = person.getFatherName(); ageInput.value = person.getAge(); fullNameInput.value = person.getFullName(); // навешиваем обработчики событий на поля ввода nameInput.oninput = () => { person.setName(nameInput.value); nameInput.value = person.getName(); }; surnameInput.oninput = () => { person.setSurname(surnameInput.value); surnameInput.value = person.getSurname(); }; fatherNameInput.oninput = () => { person.setFatherName(fatherNameInput.value); fatherNameInput.value = person.getFatherName(); }; ageInput.oninput = () => { person.setAge(ageInput.value); ageInput.value = person.getAge(); }; fullNameInput.oninput = () => { person.setFullName(fullNameInput.value); fullNameInput.value = person.getFullName(); }; } } // задание 8 getSetForm { function personForm(parent, obj) { // создаем общий реестр полей const fields = {}; // итерируем объект for (const [key, value] of Object.entries(obj)) { // определяем имя поля и тип (get или set) const fieldName = key.slice(3); const type = key.slice(0, 3); // если тип - get, то создаем поле ввода и устанавливаем значение if (type === 'get') { fields[fieldName] = document.createElement('input'); fields[fieldName].value = value(); // добавляем поле ввода в родительский DOM-элемент parent.appendChild(fields[fieldName]); } // если тип - set, то устанавливаем обработчик события на поле ввода соответствующего имени if (type === 'set') { fields[fieldName].oninput = () => { // вызываем функцию set... и заносим ее результат обратно в инпут fields[fieldName].value = value(fields[fieldName].value); }; } } } }