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.