07ObjectsFunctionalStyleHomeWork.md 3.0 KB

Домашнее задание: ООП в функциональном стиле.

  1. Напишите конструктор класса Person со следующими параметрами: name, surname, fatherName, age, sex, salary, married, сохраняемыми в полях объекта.
  2. Напишите конструктор класса Person с теми же параметрами, что и в предыдущей задаче. Поля должны хранится в замыкании. Для задания и чтения параметров напишите набор геттеров и сеттеров: getName, setName, getSurname, setSurname, getFatherName, setFatherName, getAge, setAge, getSex, setSex, getSalary, setSalary, getMarried, setMarried. Каждый из сеттер должен валидировать (проверять) данные. Если данные некорректны, данные внутри замыкания не изменяются. Сеттер всегда возвращает текущее значение переменной. См. пример
  3. Напишите функцию makeCounter, которая определяет переменную counter и возвращает другую функцию, увеличивающую counter каждый вызов и возвращающую её значение: ```javascript var counter = makeCounter() var otherCntr = makeCounter()

counter1() // 1 counter1() // 2

otherCntr() // 1 otherCntr() // 2 otherCntr() // 3

counter1() // 3

2. Напишите код, который будет делать обратный ежесекундный отсчёт в консоли, используя `console.log`. Используйте **Self Invoked Function** для создания замыкания и 
   `setTimeout` для задержки вывода. Результатом должно быть:

5 //пауза 1 секунда 4 //пауза 1 секунда 3 //пауза 1 секунда 2 //пауза 1 секунда 1 //пауза 1 секунда поехали!

3. Напишите функцию `makeProfileTimer`, которая служит для замера времени выполнения другого кода и работает следующим образом:

   ```javascript 
   var timer = makeProfileTimer()
   doSomething(); //некий код, время выполнения которого мы хотим замерить с высокой точностью
   alert(timer()); //alert должен вывести время в микросекундах от выполнения makeProfileTimer до момента вызова timer(), т. е. замерить время выполнения doSomething