Estoy trabajando con el proyecto NodeJS y me gustaría acceder a una variable privada desde su nombre de cadena, el ejemplo que muestro no es mi proyecto sino un ejemplo básico que demuestra lo que quiero hacer.
Probé opciones como
this.#[VariableContainingVarName] = ":D"
esto.[#VariableContainingVarName] = ":D"
Pero ninguno de estos funcionó, sé que esta es una solicitud extraña, pero no hay problema de seguridad con lo que estoy haciendo, porque filtro en un bucle antes de intentar atribuir cualquier dato a mi variable.
class Fun { this.#accessible = ":D"; set coolFunc(varName) { console.log(this.#accessible); this.~~HOW TO CALL IT HERE~~ = "D:" console.log(this.#accessible); } } var funny = new Fun(); funny.coolFunc("accessible"); Rendimiento esperado:
:D
D:
----Actualizar----
Por lo que algunas personas sugirieron justo debajo, esta no es una solución que funcione, quiero que estas variables sean privadas. Resultado obtenido con el siguiente { '#name': 'Button1', '#x': 32, '#y': 32 }
Para ser más claro, tengo como 80 variables, no se llaman a la fuerza cuando se llama al controlador y TODAS son privadas. Dejo que el usuario agregue sus variables con, por ejemplo
new Fun({ var1: "val", var1: "val2"... });Luego, mi constructor llama a una función que buscará cada clave y su valor para asegurarse de que esté permitido, y automáticamente atribuirá a la variable privada el valor que ingresó el usuario. Ejemplo de dicha función:
// yes it is private for a reason too #apply(configAttrib) { for (const [confElemKey, confElemValue] of Object.entries(configAttrib)) { switch (confElemKey) { case 'name': if (typeof(confElemValue) !== 'string') throw Error(`Setting ${confElemKey} is expected to be of type 'string'. Got type ${typeof(confElemValue)}.`); break; } // I want to attribute confElemValue to confElemKey here } }me gustaría acceder a una variable privada desde su nombre de cadena
Esto no es posible. La única forma de acceder a los campos de una clase privada es a través de la notación de puntos ( obj.#privateField ) y la parte #privateField siempre se evalúa literalmente.
Dado que no está proporcionando mucha información específica, tal vez una posible solución sería almacenar un objeto en un campo privado y acceder a las propiedades de esos objetos de forma dinámica:
class Fun { #data = {accessible: ":D"}; coolFunc(varName) { console.log(this.#data.accessible); this.#data[varName] = "D:" console.log(this.#data.accessible); } } var funny = new Fun(); funny.coolFunc("accessible");