javascript - JavaScript 中的私有(private)类字段

标签 javascript class static private class-fields

class A {
  #a = 1;
  static #a = 2;
}
结果是
  • Uncaught SyntaxError: redeclaration of private name #a在火狐
  • Uncaught SyntaxError: Identifier '#a' has already been declared在 Chrome

  • 尽管
    class A {
      a = 1;
      static a = 2;
    }
    
    在 Firefox 和 Chrome 中都有效
    AFAIK 实例字段将安装在类实例上,而静态字段将安装在类对象本身上。他们并不冲突。为什么以前的代码无效?

    最佳答案

    Instance fields will be installed on the class instance while static fields will be installed on the class object itself. They are not conflicted.


    它们是,因为在表达式 x.#a引擎不知道 x是类对象或类实例。 #a 的含义 token 应该是静态的并且不依赖于对象,它需要引用一个或另一个,但不能同时引用两者。
    与由标识符的字符串值标识的普通字符串键属性不同(.a.a 相同,无论上下文如何),私有(private)字段具有使用其声明创建的标识(与符号不同)。只有一个#a可以存在于 class定义,并且在不同的类中相同 #a语法将引用不同的字段。

    关于javascript - JavaScript 中的私有(private)类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67920793/

    相关文章:

    c++ - 尝试使用继承定义类时编译器出错

    static - 与非成员函数的链接错误

    javascript - 水平子菜单在iPhone上不起作用(在Chrome和Safari上可用)

    JavaScript/jQuery : How to trigger an event when "display: none" is removed?

    javascript - 如何获得类型 Backbone 模型?

    c++ - 从文本文件/XML 文件创建 C++ 类

    javascript - 简单条形图 d3

    C++ 和模块化 : Where am I supposed to draw the line?

    c++ - 私有(private)静态变量

    c++ - 静态成员与静态常量成员实例化 - 有什么区别?