// createPerson ============================================================================= function createPerson(name,surname){ return{ name: name, surname: surname, getFullName: function(){ return `${this.surname} ${this.name} ${this.fatherName ? this.fatherName : ''}` } } } const a = createPerson("Вася", "Пупкин") const b = createPerson("Анна", "Иванова") const c = createPerson("Елизавета", "Петрова") console.log(a.getFullName()) a.fatherName = 'Иванович' console.log(b.getFullName()) // createPersonClosure ============================================================================= function createPersonClosure(name,surname){ let age let fatherName const fullName = `${surname} ${name} ${fatherName}` const checkData = (data) => { if(typeof data === 'string' && data.charAt(0) == data.charAt(0).toUpperCase() ){ return data } if(typeof data === 'number' && data >=1 && data <=100){ return data } } return { getName: () => {return name}, getSurname: () => {return surname}, getFatherName: () => {return fatherName}, getFullName: () => {return fullName}, getAge: () => {return age}, setName: (newName) => {checkData(newName) ? name = newName : newName}, setSurname: (newSurname) => {checkData(newSurname) ? surname = newSurname : newSurname}, setFatherName: (newFatherName) => {checkData(newFatherName) ? fatherName = newFatherName : newFatherName}, setFullName: (newFullName) => { checkData(newFullName.split(' ')[0]) ? surname = newFullName.split(' ')[0] : newFullName checkData(newFullName.split(' ')[1]) ? name = newFullName.split(' ')[1] : newFullName checkData(newFullName.split(' ')[2]) ? fatherName = newFullName.split(' ')[2] : newFullName }, setAge: (newAge) => {checkData(newAge) ? age = newAge : newAge}, } } const a = createPersonClosure("Вася", "Пупкин") const b = createPersonClosure("Анна", "Иванова") console.log(a.getName()) a.setAge(15) console.log(a.getAge()) a.setAge(150) console.log(a.getAge()) b.setFullName("Петрова Анна Николаевна") console.log(b.getFatherName()) // createPersonClosureDestruct ============================================================================= function createPerson(person){ return{ name: person.split(' ')[0], surname: person.split(' ')[1], fatherName: person.split(' ')[2] } } function createPersonClosureDestruct(person){ let {surname = 'Фамилия не задана', name = 'Имя не задано', fatherName = 'Отчество не задано', fullName, age = 'Возраст не задан'} = person const checkData = (data) => { if(typeof data === 'string' && data.charAt(0) == data.charAt(0).toUpperCase() ){ return data } if(typeof data === 'number' && data >=1 && data <=100){ return data } } return { getName: () => {return checkData(name)}, getSurname: () => {return checkData(surname)}, getFatherName: () => {return checkData(fatherName)}, getFullName: () => {return fullName = `${surname} ${name} ${fatherName}`}, getAge: () => {return checkData(age)}, setName: (newName) => {checkData(newName) ? name = newName : newName}, setSurname: (newSurname) => {checkData(newSurname) ? surname = newSurname : newSurname}, setFatherName: (newFatherName) => {checkData(newFatherName) ? fatherName = newFatherName : newFatherName}, setFullName: (newFullName) => { checkData(newFullName.split(' ')[0]) ? surname = newFullName.split(' ')[0] : newFullName checkData(newFullName.split(' ')[1]) ? name = newFullName.split(' ')[1] : newFullName checkData(newFullName.split(' ')[2]) ? fatherName = newFullName.split(' ')[2] : newFullName }, setAge: (newAge) => {checkData(newAge) ? age = newAge : newAge}, } } const a = createPersonClosureDestruct(createPerson("Вася Пупкин")) const b = createPersonClosureDestruct({name: 'Николай', age: 75}) // isSorted ============================================================================= function isSorted (...arg){ for (let i = 0; i < arg.length - 1; i ++){ if( (arg[i] > arg[i+1]) || typeof arg[i] !== 'number' ){ return false } } return true } const a = isSorted(1,2,3,4,5,6,7) console.log(a) const b = isSorted(1,2,3,4,-5,6,7) console.log(b) const c = isSorted(1,2,3,'str',5,6,7) console.log(c) // Test isSorted ============================================================================= function isSorted (...arg){ let argNum while (argNum !== null){ argNum = prompt('Введите числа, которые хотите добавить в массив') if(argNum){ arg.push(argNum) } } for (let i = 0; i < arg.length - 1; i ++){ if( (arg[i] > arg[i+1]) || typeof arg[i] === 'number' ){ return false } } return true } isSorted() // personForm ============================================================================= function createPerson(person){ return{ name: person.split(' ')[0], surname: person.split(' ')[1], fatherName: person.split(' ')[2] } } function createPersonClosureDestruct(person){ let {surname = 'Фамилия не задана', name = 'Имя не задано', fatherName = 'Отчество не задано', fullName, age = 'Возраст не задан'} = person const checkData = (data) => { if(typeof data === 'string' && data.charAt(0) == data.charAt(0).toUpperCase()){ return data } if(typeof data === 'number' && data >=1 && data <=100){ return data } } return { getName: () => {return checkData(name)}, getSurname: () => {return checkData(surname)}, getFatherName: () => {return checkData(fatherName)}, getFullName: () => {return fullName = `${surname} ${name} ${fatherName}`}, getAge: () => {return age}, setName: (newName) => {checkData(newName) ? name = newName : name}, setSurname: (newSurname) => {checkData(newSurname) ? surname = newSurname : newSurname}, setFatherName: (newFatherName) => {checkData(newFatherName) ? fatherName = newFatherName : newFatherName}, setFullName: (newFullName) => { checkData(newFullName.split(' ')[0]) ? surname = newFullName.split(' ')[0] : newFullName checkData(newFullName.split(' ')[1]) ? name = newFullName.split(' ')[1] : newFullName checkData(newFullName.split(' ')[2]) ? fatherName = newFullName.split(' ')[2] : newFullName }, setAge: (newAge) => {checkData(newAge) ? age = newAge : newAge}, } } const b = createPersonClosureDestruct("Анна", "Иванова") b.setAge(15) b.setFullName("Петрова Анна Николаевна") function personForm( parent, person ){ const form = document.createElement('form') parent.append(form) Object.assign(form.style, {display: 'flex', flexDirection: 'column', width: '300px', backgroundColor: '#a2cac9'}) const inputName = document.createElement('input') form.appendChild(inputName) Object.assign(inputName.style, {margin: '10px'}) inputName.placeholder = 'Name' inputName.value = person.getName() inputName.oninput = () => {person.setName(inputName.value)} const inputSurname = document.createElement('input') form.appendChild(inputSurname) Object.assign(inputSurname.style, {margin: '10px'}) inputSurname.placeholder = 'Surname' inputSurname.value = person.getSurname() inputSurname.oninput = () => person.setSurname(inputSurname.value) const inputFatherName = document.createElement('input') form.appendChild(inputFatherName) Object.assign(inputFatherName.style, {margin: '10px'}) inputFatherName.placeholder = 'Fathername' inputFatherName.value = person.getFatherName() inputFatherName.oninput = () => person.setFatherName(inputFatherName.value) const inputAge = document.createElement('input') form.appendChild(inputAge) Object.assign(inputAge.style, {margin: '10px'}) inputAge.placeholder = 'Age' inputAge.value = person.getAge() inputAge.oninput = () => {person.setAge(+inputAge.value)} const inputFullName = document.createElement('input') form.appendChild(inputFullName) Object.assign(inputFullName.style, {margin: '10px'}) inputFullName.placeholder = 'Full Name' inputFullName.value = person.getFullName() inputFullName.oninput = () => person.setFullName(inputFullName.value) } const f = personForm(document.body, b) // getSetForm ============================================================================= function getSetForm(parent, obj) { const registry = {} const objForm = document.createElement('form') parent.append(objForm) Object.assign(objForm.style, {display: 'flex', flexDirection: 'column', width: '300px', backgroundColor: '#a2cac9'}) const updateInputs = () => { for (const registryKey in registry) { const keyToMethod = `get${registryKey}` if(obj[keyToMethod]){ registry[registryKey].value = obj[keyToMethod]() } } } for (const objKey in obj) { const getOrSet = objKey.slice(0, 3) const objValue = objKey.slice(3, objKey.length) const getValue = `get${objValue}` const setValue = `set${objValue}` if (registry[objValue] === undefined) registry[objValue] = document.createElement('input') if (!obj[setValue]) registry[objValue].disabled = true objForm.appendChild(registry[objValue]) Object.assign(registry[objValue].style, {margin: '10px'}) registry[objValue].type = typeof obj[getValue]() registry[objValue].placeholder = `${objValue}` registry[objValue].oninput = () => registry[objValue].type == 'number' ? obj[setValue](+registry[objValue].value) : obj[setValue](registry[objValue].value) registry[objValue].onchange = () => updateInputs() } console.log(updateInputs()) }