Oi Gustavo, tudo bem?
No exemplo que você mandou, o professor está trabalhando com herança. Quando usamos protected
em uma propriedade, estamos permitindo que essa propriedade seja acessada diretamente pelas classes filhas, mas ainda mantendo-a inacessível a partir de instâncias de fora da hierarquia de herança.
Isso é útil pra encapsular a lógica interna da classe, mas ainda assim fornecer acesso controlado às subclasses.
Aqui está um exemplo para ilustrar:
class View {
protected _element: HTMLElement;
constructor(seletor: string) {
this._element = document.querySelector(seletor);
}
}
class MensagemView extends View {
update() {
// Pode acessar _element diretamente porque é protected
this._element.innerHTML = "Atualizado!";
}
}
const mensagemView = new MensagemView("#mensagem");
mensagemView.update();
Se _element
fosse private
, a classe MensagemView
não poderia acessá-lo diretamente, o que complicaria a herança.
Agora, se você usasse um getter, como no seu exemplo:
export class View {
private _element: HTMLElement;
constructor(seletor: string) {
this._element = document.querySelector(seletor);
}
get getElement(): HTMLElement {
return this._element;
}
}
Você ainda poderia acessar _element
através do getter na classe filha:
class MensagemView extends View {
update() {
// Acessa _element através do getter
this.getElement.innerHTML = "Atualizado!";
}
}
const mensagemView = new MensagemView("#mensagem");
mensagemView.update();
No entanto, usar getters pode ser um pouco mais verboso e, em alguns casos, menos intuitivo quando se trata de herança. A escolha do professor por protected
simplifica o acesso direto à propriedade nas subclasses, mantendo a intenção clara de que essa propriedade é para uso interno da hierarquia de classes.
Um abraço e bons estudos.