O método super()
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 27 de 56.
O método super() cria e inicializa o objeto usando o construtor da classe pai. Ele deve ser chamado antes que você possa adicionar quaisquer propriedades à classe filha.
Pense desta forma: a classe pai constrói a base do objeto, e super() diz "construa essa base primeiro" antes que a classe filha adicione seus próprios recursos.
Vamos dar uma olhada no exemplo. Crie uma classe pai:
class Employee {
constructor(name) {
this.name = name;
}
}Agora crie uma classe filha que estende a classe pai:
class Manager extends Employee {
constructor(name, department) {
super(name); // Chama o construtor pai com name
this.department = department;
}
}O que está acontecendo aqui:
constructor(name, department)- Manager precisa tanto de name quanto de departmentsuper(name)- Passanamepara o construtor de Employee
this.department- Define a propriedade única do Manager
Isso cria um Manager que possui tanto propriedades herdadas (name) quanto suas próprias propriedades (department)!
Crie uma instância da classe filha:
const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name); // "Sarah"
console.log(myManager.department); // "Engineering"O método super() deve ser chamado antes de usar this no construtor de uma classe derivada. Se você não chamar super(), o JavaScript lançará um erro de referência.
Desafio
Dada uma classe Salad que estende Meal. A Salad deve ter tanto um name quanto ingredients.
Sua tarefa é completar o construtor da classe Salad ao:
- Chamar
super()com a propriedade name - Definir a propriedade
ingredients
Folha de consulta
O método super() cria e inicializa o objeto usando o construtor da classe pai. Ele deve ser chamado antes que você possa adicionar qualquer propriedade à classe filha.
Exemplo de uso do super() em uma classe filha:
class Employee {
constructor(name) {
this.name = name;
}
}
class Manager extends Employee {
constructor(name, department) {
super(name); // Chama o construtor pai primeiro
this.department = department; // Então adiciona as propriedades da filha
}
}
const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name); // "Sarah"
console.log(myManager.department); // "Engineering"Pontos principais:
super()deve ser chamado antes de usarthisno construtor da classe filha- Passe os argumentos necessários da classe filha para o construtor da classe pai
- O JavaScript lançará um erro de referência se o
super()não for chamado
Experimente você mesmo
import { Meal } from './classes.js';
import { Salad } from './classes.js';
// Código de teste - não modifique
const salad = new Salad("Caesar", ["lettuce", "croutons", "cheese"]);
console.log(salad.name); // Deve exibir "Caesar"
console.log(salad.ingredients); // Deve exibir ["lettuce", "croutons", "cheese"]Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Objetos e a Palavra-chave this
Revisão Rápida: ObjetosAdicionando Métodos a ObjetosEntendendo a Palavra-chave thisFunções ConstrutorasA Palavra-chave newDesafio de Recapitulação7Herança e a palavra-chave extends
HerançaA relação "é um"A palavra-chave extendsO método super()Herdando propriedades e métodosDesafio de recapitulação10Polimorfismo
O que é Polimorfismo?Sobrescrevendo Métodos HerdadosUsando superDesafio de Recapitulação13Composição vs. Herança
A relação "tem um" vs. "é um"Os limites da herança profundaConstruindo objetos2Organizando o Código
O que são Módulos?Exportando com exportImportando com importExportações Default vs. Nomeadas5Encapsulamento e Acesso
EncapsulamentoCampos de Classe Públicos e PrivadosMétodos PrivadosDesafio de Recapitulação8Organizando Código POO
Organizar Classes em Módulos11Projeto: Um Renderizador de Formas
Configuração: Classe Shape e ExportaçãoHerança da Classe Circle14Sistema de Gerenciamento de Biblioteca
Projetando a BibliotecaClasse Livro com Composição