Clases en JavaScript
Las clases en JavaScript son una característica introducida en ECMAScript 2015 (ES6) que proporciona una sintaxis más clara y concisa para trabajar con la herencia y el polimorfismo, conceptos fundamentales en la programación orientada a objetos (POO). Aunque las clases en JavaScript son una capa de abstracción sobre la herencia prototípica, ofrecen una forma más estructurada y familiar para los desarrolladores que provienen de otros lenguajes de programación orientados a objetos.
Definición de Clases
Las clases se pueden definir de dos maneras: mediante una declaración de clase o una expresión de clase. Ambas formas son esencialmente funciones especiales, pero con una sintaxis y semántica únicas para las clases.
- Declaración de Clase: Se define con la palabra clave
classseguida del nombre de la clase.
class Rectangle { constructor(height, width) { this.height = height; this.width = width; }}- Expresión de Clase: Puede ser anónima o tener su propio nombre.
// Expresión anónimaconst Rectangle = class { constructor(height, width) { this.height = height; this.width = width; }};
// Expresión con nombreconst Rectangle = class Rectangle2 { constructor(height, width) { this.height = height; this.width = width; }};Constructor
El método constructor es un método especial dentro de una clase que se utiliza para crear e inicializar un objeto creado con la clase. Solo puede haber un
método especial con el nombre “constructor” en una clase.
class Rectangle { constructor(height, width) { this.height = height; this.width = width; }}Métodos
Los métodos se definen en el prototipo de cada instancia de clase y son compartidos por todas las instancias. Pueden ser funciones normales, funciones asíncronas, funciones generadoras o funciones generadoras asíncronas.
class Rectangle { constructor(height, width) { this.height = height; this.width = width; } // Método calcArea() { return this.height * this.width; }}Herencia
La herencia se implementa mediante la palabra clave extends, permitiendo que una clase herede propiedades y métodos de otra clase.
La palabra reservada super se utiliza para llamar a los métodos de un objeto padre. Se puede utilizar en el constructor para llamar al constructor de la clase padre.
class Square extends Rectangle { constructor(side) { super(side, side); }}Clases y Constructores
Las clases pueden tener un constructor que inicializa las propiedades del objeto. Si no se necesita ninguna inicialización especial, se puede omitir el constructor, y se generará un constructor predeterminado.
class Animal { sleep() { console.log("zzzzzzz"); }}Diferencias entre Clases y Tipos Personalizados
- Las declaraciones de clases no se elevan como las declaraciones de funciones.
- Todo el código dentro de una clase se ejecuta automáticamente en modo estricto, y este comportamiento no se puede cambiar.
- Los métodos de clase son no enumerables. Significa que no aparecen en las iteraciones de las propiedades de la clase, como en un bucle
for...ino al usar métodos comoObject.keys()oObject.entries() - Llamar al constructor de la clase sin el operador
newresultará en un error.
Las clases en JavaScript ofrecen una forma más estructurada y clara de trabajar con objetos y patrones de diseño orientados a objetos, facilitando la organización y mantenimiento del código. Aunque las clases son una capa de abstracción sobre la herencia prototípica, proporcionan una sintaxis más familiar para los desarrolladores que provienen de otros lenguajes de programación orientados a objetos.