Recientemente me enteré de una nueva característica de Javascript (campos de instancias privadas) que le permite hacer que ciertas propiedades o métodos de objetos sean privados cuando usa una clase ES6. Por lo tanto, no puede verlos ni configurarlos usando object.property o object property = value. Sin embargo, si solo registra el objeto en la consola, le mostrará todas las propiedades, incluidos los campos supuestamente privados.
Javascript también impide que las clases secundarias puedan ver o editar la información. También bloquea la lectura de esos valores mediante Object.entries, Object.keys y Object.values. Entonces, mi pregunta es cómo puedo informar esto o posiblemente ayudar a implementar en versiones más nuevas de Javascript.
Sé que muchos de ustedes podrían pensar que no deberían incluir información confidencial en línea en el navegador, pero ¿por qué tener la función de clase privada en primer lugar?
Personalmente, puedo pensar en situaciones en las que es posible que desee ocultar información que podría procesarse detrás de escena. Por ejemplo, tal vez descifras o algún tipo de algoritmo que lleva tiempo procesar en el backend, por lo que solo quieres tener que ejecutarlo una vez. Sin embargo, necesita la información que recibe para múltiples funciones, por lo que desea almacenarla en el lado del cliente. Al mismo tiempo, no desea que el cliente pueda ver esa información.
Ejemplo: La información es legible en la consola. EDITAR: (Es posible que deba copiar y pegar el fragmento en un archivo js separado o ejecutarlo en el navegador para ver el problema).
El objeto es visible
class Account { #pin; constructor(owner, pin) { this.owner = owner; this.#pin = pin; }}; const acc = new Account('John Doe', 1234); console.log(acc); //Shows you pin in object.Sin embargo, la propiedad es privada.
class Account { #pin; constructor(owner, pin) { this.owner = owner; this.#pin = pin; }}; const acc = new Account('John Doe', 1234); console.log(acc.#pin); //Won't allow you to see pin.Los métodos y propiedades privados no están destinados a ocultar datos confidenciales.
Se usa para ocultar ciertas propiedades o métodos del desarrollador que lo está usando. Esto puede ser útil para ocultar variables internas y métodos para evitar que se sobrescriban o lean.
Ver más en Encapsulación .
JavaScript, sin embargo, no tiene campos privados. Los desarrolladores de JS usarán un _ convencionalmente para indicar que una determinada variable o método es solo para uso interno. Sin embargo, no restringe el acceso a la misma.
El nuevo # es un modificador de acceso (similar a private en java) que implementa campos privados a nivel de sintaxis, en lugar de una solución alternativa que precede a _ .