Las clases permiten una sintaxis más clara y concisa para crear objetos y definir su comportamiento (en comparación con las funciones constructoras tradicionales).
Fueron introducidas en ECMAScript 6 como una forma más estructurada y moderna de trabajar con la programación orientada a objetos (y, sobre todo, más similar a los demás lenguajes).
Las clases son Syntacic Sugar para manejar objetos. Es decir, es una sintaxis más sencilla y cómoda.
Pero, bajo el capó, los objetos de JavaScript siguen tiendo el mismo comportamiento y funcionalidades (y las mismas peculiaridaddes).
Sintaxis de clases
Una clase se declara utilizando la palabra clave class
, seguida del nombre de la clase. El nombre debe comenzar con una letra mayúscula por convención.
class NombreDeLaClase {
constructor(parametros) {
// Inicialización de propiedades
}
metodo() {
// Definición de métodos
}
}
- NombreDeLaClase: Nombre de la clase, debe seguir las convenciones de nomenclatura en JavaScript.
- constructor(parametros): Método especial que se ejecuta cuando se crea una nueva instancia de la clase. Se usa para inicializar propiedades.
- metodo(): Métodos de la clase que definen el comportamiento de las instancias.
Vamos a verlo con un ejemplo de cómo se define y se utiliza una clase básica:
class Persona {
constructor(nombre, edad) {
this.nombre = nombre;
this.edad = edad;
}
saludar() {
console.log(`Hola, mi nombre es ${this.nombre} y tengo ${this.edad} años.`);
}
}
En este ejemplo:
Persona
: Es el nombre de la clase.constructor(nombre, edad)
: Inicializa las propiedadesnombre
yedad
.saludar()
: Es un método que imprime un saludo con el nombre y la edad.this
: Hace referencia a la instancia actual de la clase.
Creación de instancias
Una clase es como un molde o plantilla que se utiliza para crear objetos con propiedades y métodos específicos. Cada objeto creado a partir de una clase se llama una instancia de esa clase.
Para crear una nueva instancia basado en una clase, se utiliza la palabra clave new
seguida del nombre de la clase y sus argumentos, si los tiene.
// Crear instancias de la clase Persona
const persona1 = new Persona("Luis", 30);
const persona2 = new Persona("Ana", 25);
persona1.saludar(); // "Hola, mi nombre es Luis y tengo 30 años."
Aquí,
persona1
es una instancia dePersona
, connombre
como “Luis” yedad
como 30.persona2
es una instancia dePersona
, connombre
como “Ana” yedad
como 25.- Al llamar al método
saludar()
, se imprime el saludo.
Métodos en las clases
Los métodos son funciones que pertenecen a una clase y pueden ser usadas por sus instancias. Se definen dentro del bloque de la clase.
class Calculadora {
sumar(a, b) {
return a + b;
}
restar(a, b) {
return a - b;
}
}
const calc = new Calculadora();
console.log(calc.sumar(3, 5)); // Imprime: 8
console.log(calc.restar(10, 4)); // Imprime: 6
Diferencia entre clases y objetos literales
Si bien los objetos literales son útiles para estructuras simples, las clases son más adecuadas para manejar lógica compleja y múltiples instancias.
Vamos a ver una comparación de como crear un mismo objeto con ambas sintaxis.
Objeto literal
const persona = {
nombre: "Luis",
hablar() {
console.log(`Hola, soy ${this.nombre}.`);
}
};
persona.hablar(); // Imprime: Hola, soy Luis.
Clase
class Persona {
constructor(nombre) {
this.nombre = nombre;
}
hablar() {
console.log(`Hola, soy ${this.nombre}.`);
}
}
let luis = new Persona("Luis");
luis.hablar();