Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

232
Views
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

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

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,
        }
    }
}
about 4 years ago · Juan Pablo Isaza Report

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

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!