创建一个类以创建一个具有可变键的对象。

3
我想要通过类实例创建一个具有可变键的对象。 我尝试了以下代码:
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);

但我收到了以下错误提示:UnhandledPromiseRejectionWarning: TypeError: Invalid attempt to destructure non-iterable instance

我期望看到以下控制台输出:

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

请问有人可以告诉我如何解决这个问题吗?


在构造函数中,[this.key]是什么? - Alan Omar
是的,我现在正在构造函数中传递。 - Avinash A
[this.key]更改为this[key],并告诉我会发生什么。 - Francisco Santorelli
@FranciscoSantorelli 仍然遇到相同的错误。 - Avinash A
2个回答

3

[this.key] =[key] = 尝试从 = 后面的内容中进行可迭代解构,但是你不能在普通对象上进行可迭代解构,因为它们不可迭代。

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,
        }
    }
}

@AlanOmar - 唉,是的,之前没有那个。我会更新的。 - T.J. Crowder
现在我正在构造函数中传递键。 - Avinash A
1
@AvinashAnshu - 是的,我已经更新了。 - T.J. Crowder
@T.J.Crowder 我又尝试了一次,但还是出现同样的错误。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, } }} - Avinash A
@T.J.Crowder 谢谢,现在它可用了,这是因为标记的行缺失了。 - Avinash A
显示剩余3条评论

1

当你执行[key] = {}时,你正在尝试进行解构,但这种方式不起作用,因为你无法像对数组那样解构对象。

你需要将值分配给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);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接