En iteraciones anteriores de Javascript, la creación de clases y la herencia se manejaban de una manera un poco confusa, a menudo recurriendo a funciones y prototipos para lograr funcionalidades similares a clases. Sin embargo, con la introducción de ECMAScript 6 (ES6), las clases se convirtieron en una característica incorporada del lenguaje, simplificando enormemente el proceso de definición y extensión de clases.
En ES6, puedes declarar una clase utilizando la palabra clave class
, seguida del nombre de la clase. Dentro de las llaves {}
, se pueden definir los métodos de la clase.
class BaseClass {
constructor() {
console.log('Creando una instancia de BaseClass');
}
miMetodo() {
console.log('Método de BaseClass');
}
}
Esta declaración crea una clase llamada BaseClass
con un constructor y un método llamado miMetodo
.
En la pregunta del quiz, se pregunta cómo extender una clase en ES6. La respuesta correcta es class SubClass extends BaseClass {}
. Para extender una clase en ES6, solo necesitas usar la palabra clave extends
seguida del nombre de la clase base. Los métodos de la clase base se heredan automáticamente en la subclase.
class SubClass extends BaseClass {
constructor() {
// llamada al constructor de la clase base
super();
console.log('Creando una instancia de SubClass');
}
miOtroMetodo() {
console.log('Método de SubClass');
}
}
En este ejemplo, la clase SubClass
extiende la BaseClass
, lo que significa que hereda todas las propiedades y métodos de BaseClass
. Además, SubClass
tiene su propio método, miOtroMetodo
.
ES6 llevó la orientación a objetos en Javascript al siguiente nivel, haciéndolo mucho más fácil y accesible. Sin embargo, todavía hay algunas cosas a tener en cuenta:
super()
en el constructor de la subclase para asegurarse de que se inicialicen correctamente las propiedades de la clase base.SubClass.prototype = new BaseClass();
parece lograr un resultado similar, este es el método antiguo de hacer herencia de prototipos, y no crea una "clase" en el sentido de ES6. Más bien, establece que las instancias de SubClass
deberían mirar al objeto BaseClass
para los métodos y propiedades que no se encuentran directamente en SubClass
.