1
resposta

Dúvida no constructor e super

Eu não entendi bem o por que de colocar as propriedades no constructor() e no super(). Qual a diferença entre esses dois e por que tem que colocar os dois?

 class User {
    constructor(nome, email, nascimento, role, ativo = true) {
        this.nome = nome
        this.email = email
        this.nascimento = nascimento 
        this.role = role || 'estudante' 
        this.ativo = ativo
    }
    
    exibirInfos() {
        return `${this.nome}, ${this.email}`
    }
}

class Admin extends User {
    constructor(nome, email, nascimento, role = 'admin', ativo = true) {
        super(nome, email, nascimento, role, ativo)  
    }
}
1 resposta

E aí Thaynara!

Então, no mundo da programação orientada a objetos em JavaScript, o constructor é tipo o "construtor" da classe. Ele é chamado quando você cria um novo objeto dessa classe. No teu caso, é quando você faz algo como:

const usuario = new User('João', 'joao@email.com', '01/01/1990', 'estudante', true);

O super(), por sua vez, é usado quando tu tá criando uma classe que herda de outra. No teu exemplo, a classe Admin tá herdando da classe User. Quando tu chama o super(), basicamente tá chamando o construtor da classe mãe (User), passando pra ela os parâmetros necessários.

Tipo, imagina que o User é o pai, e o Admin é o filho. O super() é como falar "ei pai, faz a tua parte antes de eu fazer a minha, beleza?". Ele garante que as propriedades da classe pai (User) também sejam inicializadas corretamente quando tu cria um novo Admin.

Então, ao fazer super(nome, email, nascimento, role, ativo) no Admin, ele tá chamando o constructor do User e passando os parâmetros lá, garantindo que tudo seja inicializado direitinho.

É meio como construir um prédio: o constructor é a fundação, e o super() é tipo usar a mesma fundação quando tu tá construindo um prédio que herda características do primeiro.