Javascript 是否有一种简写的方法来初始化多个私有实例变量?

Javascript 是否有一种简写的方法来初始化多个私有实例变量?,javascript,Javascript,是否有一种简写的方法来初始化多个私有实例变量 class-Foo{ #酒吧 #砰 建造师(o){ Object.assign(this,o)//无效 } } const f=new Foo({'#bar':'这是bar','#bam':'这是bam'}) 假设您的代码基于(具体来说,): 没有专用计算属性名称:#foo是专用标识符,#[foo]是语法错误 另见: 既然是这样,为什么这个['#x']不访问名为#x的私有字段呢? 这将使属性访问语义复杂化 对私有字段的动态访问与“私有”的概念相反。例

是否有一种简写的方法来初始化多个私有实例变量

class-Foo{
#酒吧
#砰
建造师(o){
Object.assign(this,o)//无效
}
}
const f=new Foo({'#bar':'这是bar','#bam':'这是bam'})

假设您的代码基于(具体来说,):

没有专用计算属性名称:
#foo
是专用标识符,
#[foo]
是语法错误

另见:

既然是这样,为什么这个['#x']不访问名为#x的私有字段呢?
  • 这将使属性访问语义复杂化

  • 对私有字段的动态访问与“私有”的概念相反。例如,这涉及:

  • 但是给出这个不是吗?#x和这个['#x']不同的语义打破了当前语法的不变吗? 不完全是,但这是一个问题。这个#x以前从来没有出现过 法律语法,所以从一个角度来看,不可能有不变量 关于它

    另一方面,它们之间的差异可能令人惊讶,而这 这是当前提议的一个缺点

    不能像使用普通属性那样动态访问私有字段。据我所知,因此没有办法实现你想做的事情


    此外,外部代码知道并试图定义私有字段似乎有些奇怪。也许您应该使用
    get
    /
    set
    来代替?

    什么是“实例变量”?这看起来不像是有效的javascript语法。如果您使用的是一个实验性方案,请说明是哪一个。您发现初始化其中一个的缩写是什么?通过实例变量,我指的是每个实例的私有字段。要初始化一个,应该是
    this.#foo='foo'
    到最后一点:一开始看起来很奇怪,但实际上,我可以看到它非常有用,我不认为它真的破坏了封装。@52d6c6af它肯定破坏了封装!私有属性的整个要点是,它只能由类内部的代码访问。简单地允许任何像普通属性一样访问它的方法都会完全失败。它不会破坏封装,因为您无法直接设置或读取字段。如果类的实现者选择将入站字段分配给内部私有字段,那么就这样吧,但调用方无法知道这一点,封装仍然有效。@52d6c6af但在您的问题示例中,它不是分配私有字段的类的实现者,它是
    Object.assign()
    执行赋值-中断封装。
    对象.assign
    位于构造函数内部。类本身选择使用速记将参数映射到内部字段。从外部看,没有人知道这一点:他们只看到参数列表。保持封装。
    class Dict extends null {
      #data = something_secret;
      add(key, value) {
        this[key] = value;
      }
      get(key) {
        return this[key];
      }
    }
    (new Dict).get('#data'); // returns something_secret