为什么 js 类不使用 public 和 private 关键字?

Gro*_*fit 0 javascript oop es6-class

因此,当他们创建 es6 类时,他们只是默认将所有内容设为公开,这对我来说有点奇怪,但我还是照做了,因为我仍然使用旧的 es5 样式基于作用域的类。

无论如何,几年过去了,我们在班级中加入了私人成员,这看起来很棒,但是你看一下 Synax:

somePublicVar = 10;
#somePrivateVar = 20;
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我们现在必须用哈希/磅符号作为私有内容的前缀,考虑到 JS 有publicprivate保留供将来使用的关键字,这似乎是一个非常奇怪的选择,所以现在我们想区分 public 和 private 为什么不是现在做。

public somePublicVar = 10;
private somePrivateVar = 20;
Run Code Online (Sandbox Code Playgroud)

所以,我相信有为什么,但我在努力找到一个技术原因,因为它现在似乎是把那些最完美的时间public,并private从保留“使用”,使得它多一点明确,明显为给定成员的访问修饰符。

dec*_*eze 5

官方常见问题解答:

为什么不是声明private x

这种声明是其他语言(特别是 Java)使用的,并暗示访问将使用this.x. 假设情况并非如此(见上文),在 JavaScript 中,这将默默地创建或访问公共字段,而不是抛出错误。这是错误的主要潜在来源,或者无形中使原本打算私有的公共字段。

它还允许声明和访问之间的对称,就像公共字段一样:

class A {
  pub = 0;
  #priv = 1;
  m() {
    return this.pub + this.#priv;
  }
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/tc39/proposal-class-fields/blob/master/PRIVATE_SYNTAX_FAQ.md#why-arent-declarations-private-x