Quiero crear un objeto con clave variable con la ayuda de la instancia de clase. Lo he intentado con el siguiente código.
class ACL { constructor(key){ this[key] = { read: false, write: false, delete: false } } setRoleReadAccess(key, value){ [key] = { read: value, } } setRoleWriteAccess(key, value){ [key] = { write: value, } } setRoleDeleteAccess(value){ [key] = { delete: value, } } } const userACL = new ACL("1234"); userACL.setRoleReadAccess("1234", true); userACL.setRoleWriteAccess("1234", true); console.log(userACL);
Pero recibo este error UnhandledPromiseRejectionWarning: TypeError: Invalid attempt to destructure non-iterable instance
estoy esperando la siguiente salida de la consola
ACL { "1234": { read: true, write: true, delete: false } }
Alguien me puede decir como se puede solucionar esto
[this.key] =
y [key] =
están tratando de hacer una desestructuración iterable en lo que sigue a =
, pero no puedes hacer una desestructuración iterable en objetos simples, no son iterables.
class ACL { constructor(key) { this[key] = { // *** read: false, write: false, delete: false } } setRoleReadAccess(key, value){ this[key] = { // *** read: value, } } setRoleWriteAccess(key, value){ this[key] = { // *** write: value, } } setRoleDeleteAccess(key, value){ // ** I added a missing `key` parameter here this[key] = { // *** delete: value, } } }
Cuando haces [key] = {}
, estás tratando de hacer una desestructuración, lo que no funciona porque no puedes desestructurar un objeto de esa manera. Solo funciona en arreglos.
Lo que necesita es una asignación a this[key]
.
class ACL { constructor(key) { this[key] = { read: false, write: false, delete: false } } setRoleReadAccess(key, value){ this[key] = { ...this[key], read: value, } } setRoleWriteAccess(key, value){ this[key] = { ...this[key], write: value, } } setRoleDeleteAccess(key, value){ this[key] = { ...this[key], delete: value, } } } const userACL = new ACL("1234"); userACL.setRoleReadAccess("1234", true); userACL.setRoleWriteAccess("1234", true); console.log(userACL);