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
[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,
}
}
}
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);