Métodos privados
Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 19 de 56.
Los métodos privados en las clases de JavaScript te permiten ocultar detalles de implementación y evitar el acceso externo a la funcionalidad interna.
A partir de ES2022, los métodos privados se pueden definir utilizando el prefijo #:
class Counter {
#count = 0;
// Crear un método privado
#increment() {
this.#count++;
}
// Método público que utiliza el método privado
addOne() {
this.#increment();
return this.#count;
}
}Creemos una instancia de Counter:
const myCounter = new Counter();Podemos llamar al método público:
console.log(myCounter.addOne()); // Salida: 1Pero intentar acceder al método privado directamente causará un error:
myCounter.#increment(); // Error: El método privado no es accesible fuera de la claseLos métodos privados ayudan a mantener el encapsulamiento al mantener ocultos los detalles de implementación interna del mundo exterior.
Desafío
Se te proporciona una clase MessageBox que almacena mensajes. Tu tarea es añadir un método privado llamado #isValidMessage(text) que valide los mensajes. Debe:
- Devolver
truesi el texto no está vacío y tiene menos de 100 caracteres - Devolver
falseen caso contrario
Hoja de referencia
Los métodos privados en las clases de JavaScript se definen utilizando el prefijo # y solo se puede acceder a ellos desde dentro de la clase:
class Counter {
#count = 0;
// Método privado
#increment() {
this.#count++;
}
// Método público que utiliza el método privado
addOne() {
this.#increment();
return this.#count;
}
}No se puede acceder a los métodos privados desde fuera de la clase:
const myCounter = new Counter();
myCounter.addOne(); // Funciona
myCounter.#increment(); // Error: El método privado no es accesibleLos métodos privados ayudan a mantener el encapsulamiento al ocultar los detalles de implementación interna.
Pruébalo tú mismo
import { MessageBox } from './messageBox.js';
// Usando el cuadro de mensaje
const box = new MessageBox();
console.log(box.setMessage("Hello")); // "Message set!" (usa #isValidMessage)
console.log(box.setMessage("")); // "Invalid message!" (usa #isValidMessage)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Objetos y la palabra clave this
Repaso rápido: ObjetosAgregar métodos a los objetosEntendiendo la palabra clave thisFunciones constructorasLa palabra clave newDesafío de repaso7Herencia y la palabra clave extends
HerenciaLa relación "es-un"La palabra clave extendsEl método super()Heredar propiedades y métodosDesafío de repaso13Composición vs. Herencia
La relación "tiene-un" vs. "es-un"Los límites de la herencia profundaConstrucción de objetos2Organización del código
¿Qué son los módulos?Exportar con exportImportar con importExportaciones por defecto vs. nombradas5Encapsulamiento y Acceso
EncapsulamientoCampos de clase públicos y privadosMétodos privadosDesafío de repaso8Organización del código OOP
Organizar clases en módulos11Proyecto: Un renderizador de figuras
Configuración: Clase Figura y exportaciónHerencia de la clase Círculo14Sistema de Gestión de Biblioteca
Diseño de la BibliotecaClase Libro con Composición9Métodos y propiedades estáticos
Nivel de clase vs. Nivel de instanciaPropiedades estáticasMétodos de utilidad estáticosDesafío de repaso