もう_
を付与する必要は無い?
ECMAScript2019 (ES10)の情報がちらほら出てきておりますが、その中でも気になった"private class"のメモ。
これまでのClass
インスタンス内は全てPublicなプロパティ/メソッドとなっているのはご存知の通りです。
そもそもJavaScriptのClassは、class
と言いつつ中身はprototype
なのでその辺を考えれば普通に違和感はありません。
隠したい場合は、名前の頭文字に_
を付与するなどして「これは隠したいの!」と明示的にアピる必要がありました。
しかしこれはあくまで規約であって、仕様としての強制力は無いので、アクセスしようと思えば簡単に出来てしまいます。
これからのClass
C++などと同様に、インスタンス内にPrivateなプロパティ/メソッドを持つ事が可能となります。
当然、外部からのアクセスは仕様的に出来なくなります。
クラス本体のスコープに直接、プロパティ/メソッド/ゲッター/セッターを定義する事で可能になったそうです。
つかいかた
class MyClass{
constructor(){
this.#privateProp = "";
this.publicProp = "";
}
#privateMethod(){
this.#privateProp = "Private!";
}
publicMethod(){
this.publicProp = "Public!";
}
}
新たに#
構文文字が実装されます。
一目瞭然ですが、Privateにしたいプロパティ/メソッドは、先頭に#
を付与します。
するとそれは、上記で説明した"本体直接定義"となる訳です。
ちなみにPublicなプロパティ/メソッドに関しては、従来通りそのままです。
const myClass = new MyClass();
myClass.#privateProp = "Overwrite"; // Error
myClass.#privateMethod(); // Error
おわりに
Google Chrome 73.0.3683.86
はまだ未対応でした。
ES10の中で一番便利そうだと感じたのはコレでしたが、他にも"Top Levelawait
"など、地味に便利そうな機能がいくつかありました。