|
@@ -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
|
|
|
+ ```
|