JavaScriptにPrivateがありますか?


ないじゃないですか。



そうかと思ったらstage 4 proposal

こつこつ!

class ClassWithPrivateField {
  #privateField;

  constructor() {
    this.#privateField = 42;
    this.#undeclaredField = 444; // Syntax error
  }

  #privateMethod() {
    return 'hello world';
  }

  getPrivateMessage() {
    return this.#privateMethod();
  }
}

const instance = new ClassWithPrivateField()
instance.#privateField === 42;   // Syntax error
console.log(instance.getPrivateMessage());
class構文を使用する場合は、フィールドまたはメソッドの前にハッシュタグを付けるだけです.

以前オドカを実現したことがありますか?


以前もprivateが必要でしたが、どうやってやったのか簡単に理解してみましょう.

低得点会議

function Constructor() {
  this._privateField = 'cant touch this';
  this.publicField = 'touch this'
}
メンバー名に低得点を加えたときに外部から近づけない試合をよく使う.読みやすさもよく、簡単ですが、実はプライベートではないという問題があります.

Closerに隠す

function Constructor() {
  const privateField = 'cant touch this';
  this.publicField = 'touch this';
};

const instance = new Constructor();

instance.privateField // undefined
少し紛らわしいですが、Closerで隠すことができます.Closerの代表的な使い方ですが、多少混同があり、これを加えると毒性が低下すると思います.