|
@@ -0,0 +1,118 @@
|
|
|
|
+# Начала ООП: ДЗ.
|
|
|
|
+
|
|
|
|
+## Тестовый код
|
|
|
|
+
|
|
|
|
+Ниже будет встречаться тестовый код, который, будучи запущен после выполненной части задания должен корректно отработать, т. е. без синтаксических
|
|
|
|
+ошибок и с ожидаемыми результатами. Если вы во вкладке с заданиями откроете **Developer Tools** и вставите туда свой код, то для проверки достаточно
|
|
|
|
+сделать "click here to run code" и посмотреть на результаты
|
|
|
|
+
|
|
|
|
+## Person
|
|
|
|
+
|
|
|
|
+Расширьте функцию-конструктор `Person` следующими полями и возможностями:
|
|
|
|
+
|
|
|
|
+### `age`
|
|
|
|
+
|
|
|
|
+Добавьте поле `age` в параметры конструктора
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
|
|
|
|
+agedPerson1.age // => 45
|
|
|
|
+
|
|
|
|
+var agedPerson2 = new Person("Barak", "Kennedy", 15)
|
|
|
|
+agedPerson2.age // => 15
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+### `hasPassport`
|
|
|
|
+
|
|
|
|
+Добавьте функцию-метод (т. е. функцию объекта), которая возвращает, есть ли паспорт у персоны, отталкиваясь от возраста.
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
|
|
|
|
+agedPerson1.hasPassport(); // true
|
|
|
|
+
|
|
|
|
+var agedPerson2 = new Person("Barak", "Kennedy", 15)
|
|
|
|
+agedPerson2.hasPassport(); // false
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+## PhoneNumber
|
|
|
|
+
|
|
|
|
+Создайте функцию-конструктор `PhoneNumber`, с двумя параметрами:
|
|
|
|
+- `number` - строка с номером телефона
|
|
|
|
+- `type` - тип номера, один из трех вариантов: `home`, `office`, `mobile`
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+var policeNumber = new PhoneNumber("+380577102", "office")
|
|
|
|
+policeNumber // => PhoneNumber{number: "+380577102", type: "office"}
|
|
|
|
+
|
|
|
|
+var medNumber = new PhoneNumber("+380577103", "mobile")
|
|
|
|
+medNumber // => PhoneNumber{number: "+380577103", type: "mobile"}
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+## Person и PhoneNumber
|
|
|
|
+
|
|
|
|
+### Person
|
|
|
|
+
|
|
|
|
+#### `addNumber`
|
|
|
|
+Создайте функцию-метод, которая будет добавлять номер телефона (объект `PhoneNumber`) во внутренний массив `phones` объекта Person. Делайте проверку на повтор и не добавляйте
|
|
|
|
+номер, если он уже присутствует в массиве `phones`
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
|
|
|
|
+var phoneNum = new PhoneNumber("+380671234567", "mobile")
|
|
|
|
+agedPerson1.addNumber(new PhoneNumber("+380577123456", "home"))
|
|
|
|
+agedPerson1.addNumber(phoneNum)
|
|
|
|
+agedPerson1.addNumber(phoneNum) // добавить не должно, должна сработать проверка на повтор
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+#### `getNumbers`
|
|
|
|
+Создайте функцию-метод, которая будет возвращать список номеров (массив `phones`)
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+agedPerson1.getNumbers() // массив с двумя объектами PhoneNumber после предыдущего тестового кода
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+### PhoneNumber
|
|
|
|
+#### `addOwner`
|
|
|
|
+Создайте функцию-метод, которая будет добавлять владельца номера телефона (объект `Person`) во внутренний массив `owners` объекта PhoneNumber. Не позволяйте
|
|
|
|
+дублировать владельца. Так же не позволяйте добавлять более одного владельца для мобильных номеров, это разрешено только для офисных и домашних номеров
|
|
|
|
+телефонов (`type` "office" и "home")
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+var policeNumber = new PhoneNumber("+380577102", "office")
|
|
|
|
+var medNumber = new PhoneNumber("+380577103", "mobile")
|
|
|
|
+
|
|
|
|
+var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
|
|
|
|
+var agedPerson2 = new Person("Barak", "Kennedy", 15)
|
|
|
|
+
|
|
|
|
+policeNumber.addOwner(agedPerson1)
|
|
|
|
+policeNumber.addOwner(agedPerson2)
|
|
|
|
+
|
|
|
|
+medNumber.addOwner(agedPerson1)
|
|
|
|
+medNumber.addOwner(agedPerson2) // не должно добавить, так как medNumber - мобильный номер, относящийся только к одному владельцу
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#### `getOwners`
|
|
|
|
+Создайте функцию-метод, которая будет возвращать список владельцев (массив `owners`). Для мобильных номеров возвращайте не массив с одним элементом,
|
|
|
|
+а напрямую единственного владельца.
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+medNumber.getOwners() // => один объект Person
|
|
|
|
+policeNumber.getOwners() // => массив объектов-владельцев номера
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+### Всё вместе.
|
|
|
|
+Обеспечьте двойную связность номеров и людей: при добавлении номера к человеку, в номер должна заносится связь с человеком. И наоборот, при добавлении
|
|
|
|
+человека как владельца номера, к персоне должна добавляться связь с номером.
|
|
|
|
+
|
|
|
|
+```javascript
|
|
|
|
+var newPerson = new Person("Lee", "See-Tsyn", 35)
|
|
|
|
+var newNumber = new PhoneNumber("+380667654321", "mobile")
|
|
|
|
+
|
|
|
|
+newNumber.addOwner(newPerson)
|
|
|
|
+newPerson.getNumbers() // => массив из одного номера телефона, который хранится в newNumber
|
|
|
|
+
|
|
|
|
+var anotherNumber = new PhoneNumber("+380681231231", "mobile")
|
|
|
|
+newPerson.addNumber(anotherNumber)
|
|
|
|
+anotherNumber.getOwners() // => newPerson
|
|
|
|
+```
|