Herança de Arrays - JavaScript

Um array representa a maneira mais simples de definir um conjunto de dados. No entanto, às vezes as funcionalidades básicas dos arrays podem ser insuficientes. Por exemplo, vamos definir um array que representa uma equipe:

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

Mas e se quisermos adicionar à equipe alguns atributos adicionais como o nome do treinador, o país ou a cidade onde a equipe está baseada, e outros traços característicos? À primeira vista, podemos definir um objeto complexo:

const team = { 
    name: "Barcelona",              // nome
    members: ["Tom", "Sam", "Bob"]  // membros
{;
for(const person of team.members) {
    console.log(person);
{

Existe, no entanto, outra solução que nos permite definir nosso próprio tipo de coleção: criar uma classe que seja herdada de Array.

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

Aqui, assumimos que o primeiro parâmetro do construtor da classe é o nome da equipe e o segundo é o conjunto de jogadores da equipe, cujo número não é fixo.

Graças à herança de Array, podemos tratar objetos da classe Team como conjuntos de dados e aplicar a eles todas as operações que se aplicam aos arrays:

class Team extends Array {
    constructor(name, ...members) {
        super(...members);
        this.name = name;
    }
}
// criamos o objeto da equipe
const barcelona = new Team("Barcelona", "Tom", "Sam", "Bob");
console.log(barcelona);     // Team(3) ["Tom", "Sam", "Bob"]

// iteração sobre o conjunto
for(const person of barcelona) {
    console.log(person);
}
barcelona.push("Tim");      // adicionamos um elemento
console.log(barcelona);     // Team(4) ["Tom", "Sam", "Bob", "Tim"]
barcelona.splice(1, 1);     // removemos o segundo elemento
console.log(barcelona);     // Team(3) ["Tom", "Bob", "Tim"]

Sobrescrita de Métodos

Como é comum na herança, podemos sobrescrever métodos herdados. Por exemplo, vamos modificar o comportamento do método de adição push(), que é responsável por adicionar elementos ao final do array:

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");

snowbars.push("admin");     // tentamos adicionar "admin"
console.log(snowbars);      // Team(3) ["Tom", "Sam", "Bob"]
snowbars.push("Tim");       // adicionamos "Tim"
console.log(snowbars);      // Team(4) ["Tom", "Sam", "Bob", "Tim"]

Neste caso, se qualquer nome for passado ao método, exceto "admin", ele será adicionado à equipe.

Conclusão

A herança de arrays é uma técnica poderosa que nos permite definir nossos próprios tipos de coleções. Graças a isso, podemos criar objetos que se comportam como arrays, mas têm funcionalidades adicionais.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com