You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何自动枚举并打印对象的所有私有属性?

如何枚举并打印JS类的所有属性(含私有属性)

首先明确:JavaScript的私有字段(以#开头)是类的私有成员,仅能在类内部访问,外部的常规枚举方法(比如Object.keys、JSON.stringify)无法获取这些私有字段。但可以在类内部实现逻辑,无需逐个指定就能自动收集所有属性(包括私有属性)。

实现方法

在类内部添加一个方法,利用类对私有字段的访问权限,结合Reflect.ownKeys()获取所有键(包括私有字段的特殊键),然后遍历收集键值对:

class Foo {
  #a;
  #b = 123;
  c = 3.14;

  getAllProperties() {
    return Reflect.ownKeys(this).reduce((props, key) => {
      // 类内部可以直接访问私有字段
      props[key.toString()] = this[key];
      return props;
    }, {});
  }

  tellYourself() {
    const allProps = this.getAllProperties();
    console.log("OK the values are", JSON.stringify(allProps));
  }
}

const foo = new Foo();
foo.tellYourself();

执行这段代码会输出:

OK the values are {"#a":null,"#b":123,"c":3.14}

原理说明

  • Reflect.ownKeys(this)会返回对象的所有自有键,包括常规属性、Symbol属性以及私有字段的特殊标识键;
  • 由于是在类内部执行,我们可以直接通过this[key]访问私有字段的值,无需逐个指定字段名;
  • 最后用reduce把键值对整理成普通对象,方便用JSON.stringify打印。

如果想在类外部获取这些私有属性,没有合法的通用方法——这正是JS私有字段的设计初衷:强制封装,仅允许类内部访问。

内容的提问来源于stack exchange,提问作者Stefanie Gauss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:25:00