clases-en-javascript

Clases en JavaScript

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 propiedades nombre y edad.
  • 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 de Persona, con nombre como “Luis” y edad como 30.
  • persona2 es una instancia de Persona, con nombre como “Ana” y edad 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();