Atributos privados en clases JavaScript

Javascript

En JavaScript podemos agregar atributos privados a las clases. Sin embargo, antes de que esto fuese posible, se utilizaba una convención en su lugar.

Antigua convención

La convención más utilizada consistía en agregar un guion bajo _ justo antes del nombre del atributo, informando de que se trata de un atributo privado al que no se debe acceder directamente desde fuera de la clase:.

class Persona {
  _nombre = 'Edu';

  renombrar(nombre) {
    this._nombre = nombre;
  }
}

Sin embargo, dado que no se trata de una funcionalidad del lenguaje, sigue siendo posible acceder desde fuera al atributo definido como privado, que el caso de nuestro ejemplo es el atributo nombre:

const individuo = new Persona()
console.log(individuo ._nombre); // Edu

Atributos privados

Las últimas versión de Ndoe.js y de navegadores como Chrome ya soportan atributos privados reales. Para definirlos debes anteponer el carácter sostenido # justo antes del nombre del atributo:

class Persona {
  #nombre = 'Edu';

  renombrar(nombre) {
    this.#nombre = nombre;
  }
}

Si ahora intentamos acceder directamente a un atributo definido como privado obtendremos un error, estando forzados a usar los métodos que proporcione la clase. Esto mejora la encapsulación de las clases, evitando que podamos modificar atributos privados desde fuera de la clase accidentalmente.

Los atributos solamente se podrás definir como privados cuando declares la clase y no en tiempo de ejecución.

Debes tener en cuenta de que esta sintaxis todavía se encuentra en fase experimental, por lo que todavía no se recomienda su uso. Puedes comprobar es estado de la propuesta en este enlace. En teoría debería ser compatible, aunque sin soporte oficial todavía, desde la versión 72 del navegador Chrome y desde la versión 12 del entorno Node.js.

Y esto ha sido todo.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”