Манипуляция объектами в классах в ООП в JavaScript

Классы параметрами методов могут принимать объекты других классов и манипулировать этими объектами. Давайте посмотрим на примере. Пусть у нас есть следующий класс:

javascriptclass User {
  #name;
  
  constructor(name) {
    this.#name = name;
  }
  getName() {
    return this.#name;
  }
}

Пусть мы решили сделать класс, который будет манипулировать набором объектов с юзерами:

javascriptclass UsersCollection {
  
}

Будем хранить объекты с юзерами в виде массива в приватном свойстве:

javascriptclass UsersCollection {
  #users;
  
  constructor() {
    this.#users = [];
  }
}

Сделаем метод для добавления нового юзера в массив:

javascriptclass UsersCollection {
  #users;
  
  constructor() {
    this.#users = [];
  }
  add(user) {
    this.#users.push(user);
  }
}

А теперь сделаем метод, который выведет в консоль имена всех юзеров:

javascriptclass UsersCollection {
  #users;
  
  constructor() {
    this.#users = [];
  }
  add(user) {
    this.#users.push(user);
  }
  show() {
    for (let user of this.#users) {
      console.log(user.getName());
    }
  }
}

Давайте посмотрим на работу нашего класса. Для начала создадим его объект:

javascriptlet uc = new UsersCollection;

Теперь добавим в нашу коллекцию несколько юзеров:

javascriptuc.add(new User('john'));
uc.add(new User('eric'));
uc.add(new User('kyle'));

А теперь вызовем метод, который выведет в консоль имена всех юзеров:

javascriptuc.show();
Задание 1

Сделайте класс EmployeesCollection, который будет содержать массив работников.

Задание 2

Сделайте в этом классе метод для добавления нового работника.

Задание 3

Сделайте в этом классе метод для вывода всех работников.

Задание 4

Сделайте в этом классе метод для расчета суммарной зарплаты всех работников.

Задание 5

Сделайте в этом классе метод для расчета средней зарплаты всех работников.