es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer una sugerencia sobre una nueva característica de JavaScript?

Recientemente aprendí sobre una nueva característica de JavaScript (campos de instancia privados) que te permite hacer que ciertas propiedades o métodos de un objeto sean privados cuando se utiliza una clase ES6. Por lo tanto, no puedes ver o establecer dichas propiedades usando objeto.propiedad o objeto.propiedad = valor. Sin embargo, si solo registras el objeto en la consola, te mostrará todas las propiedades, incluidos los campos supuestamente privados.

JavaScript también bloquea el acceso de las clases hijas a la información y bloquea la lectura de esos valores utilizando Object.entries, Object.keys y Object.values. Entonces, mi pregunta es cómo puedo informar sobre esto o posiblemente ayudar a implementarlo en nuevas versiones de JavaScript.

Sé que muchos de ustedes podrían pensar que no debería incluir información sensible directamente en el navegador, pero ¿por qué tener la función de clase privada en primer lugar?

Personalmente, puedo pensar en situaciones en las que puedes querer ocultar información que podría procesarse de manera interna. Por ejemplo, tal vez desencriptes o apliques algún tipo de algoritmo que tarda en procesarse en el backend y solo quieres ejecutarlo una vez. Sin embargo, necesitas la información que se obtiene para múltiples funciones, por lo que deseas almacenarla en el cliente. Al mismo tiempo, no quieres que el cliente pueda ver esa información.

Ejemplo: La información es legible en la consola. EDITAR: (Puede que tengas que 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); // Muestra el pin en el objeto.

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); // No te permite ver el pin.
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en JavaScript, una forma de informar sobre este problema sería presentar un informe de error o solicitud de funcionalidad al comité oficial de especificación de ECMAScript (ES). El comité es responsable de definir las características estándar de JavaScript y podría estar interesado en conocer este problema con los campos de instancia privados.

    Para enviar un informe, puedes visitar el repositorio de especificaciones de ES en GitHub y abrir un nuevo problema. En el informe, puedes explicar el problema que encontraste con los campos de instancia privados y sugerir posibles soluciones o mejoras al lenguaje.

    Es importante tener en cuenta que el comportamiento que describiste no es un error, sino una decisión de diseño tomada por los creadores de JavaScript. Los campos de instancia privados están destinados a proporcionar encapsulación y una mejor organización del código, pero no están destinados a proporcionar seguridad absoluta contra todas las formas de acceso. También es importante tener en cuenta que el código JavaScript del lado del cliente siempre es visible para el cliente y la información sensible no debe almacenarse en el código del lado del cliente en primer lugar.

    En resumen, si encuentras un problema o tienes una sugerencia para una nueva característica de JavaScript, puedes informarlo al comité de especificación de ES a través de su repositorio en GitHub. Sin embargo, es importante tener en cuenta las limitaciones de JavaScript en el lado del cliente y evitar incluir información sensible en el código basado en el navegador.

Comments are closed.