← JavaScript EspañolChapter 08 of 13

Clases

## Objetivos de Aprendizaje - Crear clases con constructores - Definir métodos y propiedades - Entender herencia de clases - Usar getters y setters ## Introducción a las Clases ### Declaración de Clase ```javascript class Persona { constructor(nombre, edad) { this.nombre = nombre; this.edad = edad; } saludar() { return `¡Hola! Soy ${this.nombre}`; } } const ana = new Persona("Ana", 28); console.log(ana.saludar()); // "¡Hola! Soy Ana" console.log(ana.edad); // 28 ``` ### Expresión de Clase ```javascript const Persona = class { constructor(nombre) { this.nombre = nombre; } }; ``` ## Constructor ### Constructor Básico ```javascript class Coche { constructor(marca, modelo, año) { this.marca = marca; this.modelo = modelo; this.año = año; } } const miCoche = new Coche("Toyota", "Corolla", 2023); console.log(miCoche.marca); // "Toyota" ``` ### Constructor con Valores Predeterminados ```javascript class Persona { constructor(nombre = "Anónimo", edad = 0) { this.nombre = nombre; this.edad = edad; } } const persona = new Persona(); console.log(persona.nombre); // "Anónimo" ``` ## Métodos ### Métodos de Instancia ```javascript class Calculadora { constructor() { this.resultado = 0; } sumar(n) { this.resultado += n; } restar(n) { this.resultado -= n; } obtenerResultado() { return this.resultado; } } const calc = new Calculadora(); calc.sumar(10); calc.restar(3); console.log(calc.obtenerResultado()); // 7 ``` ### Métodos Estáticos ```javascript class Matematicas { static sumar(a, b) { return a + b; } static PI = 3.14159; } console.log(Matematicas.sumar(5, 3)); // 8 console.log(Matematicas.PI); // 3.14159 ``` ## Getters y Setters ### Definición ```javascript class Persona { constructor(nombre) { this._nombre = nombre; } get nombre() { return this._nombre.toUpperCase(); } set nombre(valor) { this._nombre = valor.trim(); } } const persona = new Persona(" Juan "); console.log(persona.nombre); // "JUAN" persona.nombre = " Ana "; console.log(persona.nombre); // "ANA" ``` ### Validación con Setter ```javascript class Temperatura { constructor(celsius) { this.celsius = celsius; } get fahrenheit() { return (this.celsius * 9/5) + 32; } set fahrenheit(valor) { this.celsius = (valor - 32) * 5/9; } } const temp = new Temperatura(25); console.log(temp.fahrenheit); // 77 temp.fahrenheit = 86; console.log(temp.celsius); // 30 ``` ## Campos Privados ### Con # (Hash) ```javascript class Contador { #conteo = 0; incrementar() { this.#conteo++; } obtenerConteo() { return this.#conteo; } } const contador = new Contador(); contador.incrementar(); contador.incrementar(); console.log(contador.obtenerConteo()); // 2 // console.log(contador.#conteo); // Error: privado ``` ## Herencia ### Extends ```javascript class Animal { constructor(nombre) { this.nombre = nombre; } hablar() { return "Sonido"; } } class Perro extends Animal { hablar() { return "¡Guau!"; } } class Gato extends Animal { hablar() { return "¡Miau!"; } } const perro = new Perro("Buddy"); console.log(perro.nombre); // "Buddy" console.log(perro.hablar()); // "¡Guau!" ``` ### super ```javascript class Persona { constructor(nombre, edad) { this.nombre = nombre; this.edad = edad; } } class Empleado extends Persona { constructor(nombre, edad, salario) { super(nombre, edad); // Llamar al constructor padre this.salario = salario; } } const emp = new Empleado("Juan", 30, 50000); console.log(emp.nombre); // "Juan" console.log(emp.salario); // 50000 ``` ## Métodos Privados ```javascript class Calculadora { _resultado = 0; _validarNumero(n) { if (typeof n !== "number" || isNaN(n)) { throw new Error("Número inválido"); } } sumar(n) { this._validarNumero(n); this._resultado += n; } obtenerResultado() { return this._resultado; } } ``` ## toString ```javascript class Persona { constructor(nombre, edad) { this.nombre = nombre; this.edad = edad; } toString() { return `Persona(${this.nombre}, ${this.edad})`; } } const persona = new Persona("Ana", 28); console.log(persona.toString()); // "Persona(Ana, 28)" console.log(String(persona)); // "Persona(Ana, 28)" ``` ## Resumen - Clases: `class Nombre { constructor() {...} }` - `constructor` inicializa la instancia - Métodos: funciones dentro de clases - `static` para métodos de clase (no de instancia) - Getters/setters: `get prop() {} set prop(v) {}` - Campos privados: `#campo` (solo accesible dentro de la clase) - Herencia: `class Hija extends Madre` - `super()` llama al constructor padre - `toString()` define representación string del objeto

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →