如何枚举私有JavaScript类字段

如何枚举私有类字段?

class Person {
  #isFoo = true;
  #isBar = false;

  constructor(first, last) {
    this.firstName = first;
    this.lastName = last;
  }

  enumerateSelf() {
    console.log(this);
    // (pub/priv fields shown)

    // enumerate through instance fields
    for (let key in this) {
      console.log(key)
      // (only public fields shown)
    }

    // How do we enumerate/loop through private fields too?
  }
}

new Person('J', 'Doe').enumerateSelf();

解决方案

不可能。它们是私有字段,并且没有枚举方法。只有类声明静态地知道声明了哪些类。它们不是属性,甚至没有代表私有名称的语言值,您cannot access them dynamically(like with bracket notation)。

您最多只能得到

enumerateSelf() {
    console.log(this);
    for (let key in this) {
        console.log("public", key, this[key]);
    }
    console.log("private isFoo", this.#isFoo);
    console.log("private isBar", this.#isBar);
}

私有字段提案中有关于";私有字段迭代";的an open issue,但是TC39成员国&私有字段的首批评论之一不是属性。你不能刻意去思考它们。&q;。

相关文章