1
resposta

[Dúvida] Constructor com herança

private mensagemView = new MensagemView("#mensagemView");

// Classe pai.
export abstract class View<T> { 
     protected elemento: HTMLElement;
     constructor(seletor: string) { 
          this.elemento = document.querySelector(seletor);
     }

     protected abstract template(modelo: T): string;

     update(modelo: T): void {
          const template: string = this.template(modelo);
          this.elemento.innerHTML = template;
     }
}

// Classe filha que extend a Pai
import { View } from "./view.js";

export class MensagemView extends View<string>{

     protected template(mensagem: string): string {
          return `
               <p class="alert alert-info">${mensagem}</p>
          `;
     }

}

Olá tenho esses dois códigos de TS, uma classe Pai e outra Filha, no caso eu instancio minha classe MensagemView com um seletor, porém eu não apresento o constructor nela, só na Pai. No caso quando eu instancio, ela automaticamente realiza o constructor por "baixo dos panos"?

1 resposta

Oi.

Quando você instancia a classe Filha, o constructor vem da classe Pai por herança e é chamado.

Você também poderia implementar o constructor na classe Filha, só que nesse caso você é obrigado a chamar o constructor da classe Pai utilizando super(). Exemplo:

export class MensagemView extends View<string>{
    constructor(seletor: string) {
        super(seletor); //invoca o constructor da classe Pai
        console.log('constructor da classe filha');
    }
}