问题描述
下面的屏幕截图显示了 new A()
的值,但其属性已重新排序。
这有什么好的理由吗?
代码
class A {
constructor() { }
#private1 = 1;
public1 = 11;
#private2 = 2;
public2 = 22;
}
new A();
结果:
解决方法
私有成员不是普通属性(以字符串或符号为键),它们不共享可以任意穿插的顺序。
实际上,私有成员根本不可枚举,因此您永远不能以任何顺序列出它们。没有 JS 功能可以做到这一点。
开发工具(使用调试器 API 访问对象)显然选择首先列出对象的属性,然后是对象的私有字段,按照定义的顺序。请注意,这可能会随时更改,您不应认为它有任何意义。