Car*_* Li 5 javascript static private class class-fields
class A {
#a = 1;
static #a = 2;
}
Run Code Online (Sandbox Code Playgroud)
结果是
Uncaught SyntaxError: redeclaration of private name #a在火狐浏览器中Uncaught SyntaxError: Identifier '#a' has already been declared在 Chrome 中尽管
class A {
a = 1;
static a = 2;
}
Run Code Online (Sandbox Code Playgroud)
在 Firefox 和 Chrome 中均有效
AFAIK 实例字段将安装在类实例上,而静态字段将安装在类对象本身上。他们并不冲突。为什么之前的代码无效?
实例字段将安装在类实例上,而静态字段将安装在类对象本身上。他们并不冲突。
它们是,因为在表达式中x.#a引擎不知道x是类对象还是类实例。令牌的含义#a应该是静态的,不依赖于对象,它需要引用一个或另一个,但不能同时引用两者。
与由标识符的字符串值标识的普通字符串键控属性(.a与.a上下文无关)不同,私有字段具有使用其声明创建的标识(与符号不同)。每个定义#a只能存在一个class,并且在不同的类中,相同的#a语法将引用不同的字段。