123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- // ДЗ: Функции
- // задание 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);
- };
- }
- }
- }
- }
|