JavaScriptで `#`記号は何をしますか?

Nov 23 2020

記号を含むコードに遭遇しました#。それは何のために使われますか?コードは次のようになります。

class someObject{
  #someMethod(){
    //do something 
  }
}

回答

5 T.J.Crowder Nov 23 2020 at 20:05

これは、メンバーがプライベートであることを示す(演算子ではなく)印章です。この場合はプライベートメソッドですが、プライベートフィールドにも使用されます。

クラス外のコードでプライベートメソッドまたはプライベートフィールドを使用して、それらを宣言することはできません。例えば:

class Example {
    doSomething() {
        this.#method("from doSomething"); // <== Works
    }
    #method(str) {
        console.log("method called: " + str);
    }
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
3 Mr.Alien Nov 23 2020 at 20:05

これは実験的な提案です。を使用してプライベートJavaScriptメソッドを定義できます#

詳細については、MDNドキュメントを参照してください。

クラスのプロパティはデフォルトでパブリックであり、クラスの外部で調べたり変更したりできます。ただし、ハッシュプレフィックスを使用してプライベートクラスフィールドを定義できるようにする実験的な提案があり#ます。


ES5を使用して(説明を簡単にするために)同様のことを実現できます。ここでは、プライベートメソッド(JavaScriptにはネイティブメソッドがありません)のようなものをシミュレートできます。

例えば:

function someObj() { //assuming this is a class definition
  function someMethod() { //private method which is not accessible outside someObj

  }

  function init() { //initializes some methods or code, private methods can be used here
    someMethod();
  }

  return {
    init //only exposes the init method outside
  }
}

上記では、として呼び出すことができるinitからのメソッドのみを公開しますが、親メソッドの外部からはアクセスできません。someObjsomeObj.init()someMethod

例:

someObj.init(); //works
someObj.someMethod(); //won't be accessible
1 Jondi Nov 23 2020 at 20:08

ハッシュはプライベートクラスフィールドを定義するために使用されます