El método super()
Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy. Lección 27 de 56.
El método super() crea e inicializa el objeto utilizando el constructor de la clase principal. Debe llamarse antes de que puedas añadir propiedades a la clase hija.
Piénsalo de esta manera: la clase padre construye los cimientos del objeto, y super() dice "construye esos cimientos primero" antes de que la clase hija añada sus propias características.
Echemos un vistazo al ejemplo. Crea una clase padre:
class Employee {
constructor(name) {
this.name = name;
}
}Ahora crea una clase hija que extienda a la clase padre:
class Manager extends Employee {
constructor(name, department) {
super(name); // Llama al constructor padre con name
this.department = department;
}
}Qué está ocurriendo aquí:
constructor(name, department)- Manager necesita tanto el nombre como el departamentosuper(name)- Pasanameal constructor de Employee
this.department- Establece la propiedad única de Manager
¡Esto crea un Manager que tiene tanto propiedades heredadas (name) como sus propias propiedades (department)!
Crea una instancia de la clase hija:
const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name); // "Sarah"
console.log(myManager.department); // "Engineering"El método super() debe llamarse antes de usar this en el constructor de una clase derivada. Si no llamas a super(), JavaScript generará un error de referencia.
Desafío
Dada una clase Salad que extiende Meal. La ensalada debe tener tanto un nombre como ingredientes.
Tu tarea es completar el constructor de la clase Salad mediante:
- Llamar a
super()con la propiedad name - Establecer la propiedad
ingredients
Pruébalo tú mismo
import { Meal } from './classes.js';
import { Salad } from './classes.js';
// Código de prueba - no modificar
const salad = new Salad("Caesar", ["lettuce", "croutons", "cheese"]);
console.log(salad.name); // Debería mostrar "Caesar"
console.log(salad.ingredients); // Debería mostrar ["lettuce", "croutons", "cheese"]Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Objetos y la palabra clave this
Repaso rápido: ObjetosAgregar métodos a los objetosEntendiendo la palabra clave thisFunciones constructorasLa palabra clave newDesafío de repaso7Herencia y la palabra clave extends
HerenciaLa relación "es-un"La palabra clave extendsEl método super()Heredar propiedades y métodosDesafío de repaso13Composición vs. Herencia
La relación "tiene-un" vs. "es-un"Los límites de la herencia profundaConstrucción de objetos2Organización del código
¿Qué son los módulos?Exportar con exportImportar con importExportaciones por defecto vs. nombradas5Encapsulamiento y Acceso
EncapsulamientoCampos de clase públicos y privadosMétodos privadosDesafío de repaso8Organización del código OOP
Organizar clases en módulos11Proyecto: Un renderizador de figuras
Configuración: Clase Figura y exportaciónHerencia de la clase CírculoSobrescritura y método de áreaContador de figuras estático14Sistema de Gestión de Biblioteca
Diseño de la BibliotecaClase Libro con ComposiciónValidación del Autor del Libro9Métodos y propiedades estáticos
Nivel de clase vs. Nivel de instanciaPropiedades estáticasMétodos de utilidad estáticosDesafío de repasoPractica por tu cuenta: Compilador de JavaScript online