07HomeWork.md 5.6 KB

Начала ООП: ДЗ.

Тестовый код

Ниже будет встречаться тестовый код, который, будучи запущен после выполненной части задания должен корректно отработать, т. е. без синтаксических ошибок и с ожидаемыми результатами. Если вы во вкладке с заданиями откроете Developer Tools и вставите туда свой код, то для проверки достаточно сделать "click here to run code" и посмотреть на результаты

Person

Расширьте функцию-конструктор Person следующими полями и возможностями:

age

Добавьте поле age в параметры конструктора

var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
agedPerson1.age // => 45

var agedPerson2 = new Person("Barak", "Kennedy", 15)
agedPerson2.age // => 15

hasPassport

Добавьте функцию-метод (т. е. функцию объекта), которая возвращает, есть ли паспорт у персоны, отталкиваясь от возраста.

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
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

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)

agedPerson1.getNumbers() // массив с двумя объектами PhoneNumber после предыдущего тестового кода

PhoneNumber

addOwner

Создайте функцию-метод, которая будет добавлять владельца номера телефона (объект Person) во внутренний массив owners объекта PhoneNumber. Не позволяйте дублировать владельца. Так же не позволяйте добавлять более одного владельца для мобильных номеров, это разрешено только для офисных и домашних номеров телефонов (type "office" и "home")

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). Для мобильных номеров возвращайте не массив с одним элементом, а напрямую единственного владельца.

medNumber.getOwners() // => один объект Person
policeNumber.getOwners() // => массив объектов-владельцев номера

Всё вместе.

Обеспечьте двойную связность номеров и людей: при добавлении номера к человеку, в номер должна заносится связь с человеком. И наоборот, при добавлении человека как владельца номера, к персоне должна добавляться связь с номером.

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