Ivan Grinkin 8 years ago
parent
commit
e161595ffb
1 changed files with 42 additions and 0 deletions
  1. 42 0
      07ObjectsFunctionalStyleHomeWork.md

+ 42 - 0
07ObjectsFunctionalStyleHomeWork.md

@@ -0,0 +1,42 @@
+# Домашнее задание: ООП в функциональном стиле.
+
+0. Напишите конструктор класса `Person` со следующими параметрами:
+   `name`, `surname`, `fatherName`, `age`, `sex`, `salary`, `married`, сохраняемыми в полях объекта.
+1. Напишите конструктор класса `Person` с теми же параметрами, что и в предыдущей задаче. Поля должны хранится в *замыкании*. Для задания и чтения
+   параметров напишите набор *геттеров и сеттеров*: `getName`, `setName`, `getSurname`, `setSurname`, `getFatherName`, `setFatherName`, `getAge`, 
+   `setAge`, `getSex`, `setSex`, `getSalary`, `setSalary`, `getMarried`, `setMarried`. Каждый из сеттер должен *валидировать* 
+   (проверять) данные. Если данные некорректны, данные внутри замыкания не изменяются. 
+   **Сеттер** всегда возвращает *текущее* значение переменной. См. [пример](http://gitlab.a-level.com.ua/gitgod/FrontendLectures/src/master/07ObjectsFunctionalStyle.md#--)
+2. Напишите функцию `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
+   ```