Company logo
  • Empleos
  • Bootcamp
  • Acerca de nosotros
  • Para profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
    • Bootcamp
  • Para empresas
    • Inicio
    • Nuestro proceso
    • Planes
    • Pruebas
    • Nómina
    • Blog
    • Comercial
    • Calculadora

0

65
Vistas
Build a class to create an object with variable key

I want to create an object with variable key with the help of class instance. I have tried by the following code

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);

But i am getting this error UnhandledPromiseRejectionWarning: TypeError: Invalid attempt to destructure non-iterable instance

i am expecting the following console output

ACL {
 "1234": {
    read: true,
    write: true,
    delete: false
  }
}

Can anyone tell me how can resolve this

8 months ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

[this.key] = and [key] = are trying to do iterable destructuring on what follows the =, but you can't do iterable destructuring on plain objects, they aren't iterable.

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,
        }
    }
}
8 months ago · Juan Pablo Isaza Denunciar

0

When you do [key] = {}, you are trying to do a destructuring, which doesn't work because you can't destructure an object that way. It only works on arrays.

What you need is an assignment to 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);

8 months ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos