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
からのメソッドのみを公開しますが、親メソッドの外部からはアクセスできません。someObj
someObj.init()
someMethod
例:
someObj.init(); //works
someObj.someMethod(); //won't be accessible
1 Jondi Nov 23 2020 at 20:08
ハッシュはプライベートクラスフィールドを定義するために使用されます