Полный цикл в digital

Наследование массивов

Массив представляет наиболее простой способ определения набора данных. Но иногда базовых возможностей массивов может быть недсотаточно. Например, определим массив, который представляет некоторую команду:

const team = ["Tom", "Sam", "Bob"];
for(const person of team) {
console.log(person);
}

Но что, если мы хотим добавить к команде какие-то доолнительные атрибуты - имя тренера, страну или город, где базируется команда, название, какие-то другие признаки? На первый взгляд, мы можем определить сложный объект:

const team = { 
// название
name: "Barcelona",              
// игроки
members: ["Tom", "Sam", "Bob"]  
};
for(const person of team.members) {
console.log(person);
}

Но есть и другое решение, которое позволяет нам определить свой тип коллекции: создать свой класс, который будет унаследован от Array:

class Team extends Array{
constructor(name, ...members){
super(...members);
this.name = name;
}
}

Здесь мы предполагаем, что в качестве первого параметра конструктора класса выступает имя команды, а в качестве второго - набор игроков команды, число которых не фиксировано.

Благодаря наследованию от Array мы можем рассматривать объекты класса Team как наборы данных и применять к ним все те операции, которые применяются к массивам:

class Team extends Array{
constructor(name, ...members){
super(...members);
this.name = name;
}
}
// создаем объект команды
const barcelona = new Team("Barcelona", "Tom", "Sam", "Bob");
// Team(3) ["Tom", "Sam", "Bob"]
console.log(barcelona);  
// перебор набора
for(const person of barcelona) {
console.log(person);
}
// добавим один элемент
barcelona.push("Tim");  
// Team(4) ["Tom", "Sam", "Bob", "Tim"]
console.log(barcelona);  
// удалим второй элемент
barcelona.splice(1, 1);  
// Team(3) ["Tom", "Bob", "Tim"]
console.log(barcelona);

Переопределение методов

Как и в общем при наследоваании м можем переопределять унаследованные методы. Например, переопределим поведение метода добавления push(), который отвечает за добавление в конец массива:

class Team extends Array{
constructor(name, ...members){
super(...members);
this.name = name;
}
push(person){
if(person !== "admin") super.push(person);
}
}
const snowbars = new Team("SnowBars", "Tom", "Sam", "Bob");
// добавим один элемент - admin
snowbars.push("admin");  
// Team(3) ["Tom", "Sam", "Bob"]
console.log(snowbars);  
// добавим один элемент - Tim
snowbars.push("Tim");  
// Team(4) ["Tom", "Sam", "Bob", "Tim"]
console.log(snowbars);

В данном случае если в метод передано любое имя, кроме admin, то оно добавляется в команду.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг