首页 > 解决方案 > JS 语义:为什么私有和公共类属性似乎被重新排序?

问题描述

下面的屏幕截图显示了 的值new A(),但其属性已重新排序。

这有什么好的理由吗?

代码

class A {
  constructor() { }
  #private1 = 1;
  public1 = 11;

  #private2 = 2;
  public2 = 22;
}

new A();

结果:

在此处输入图像描述

标签: javascriptclassecmascript-6semanticsprivate-members

解决方案


私有成员不是普通属性(用字符串或符号作为键),它们不共享可以任意穿插的顺序。

事实上,私有成员根本不是可枚举的,所以你永远不能以任何顺序列出它们。没有 JS 功能可以做到这一点。

devtools(使用调试器 API 访问对象)显然选择首先列出对象的属性,然后按定义的顺序列出对象的私有字段。请注意,这可能随时发生变化,您不应认为它具有任何意义。


推荐阅读