LoginSignup
3
0

More than 5 years have passed since last update.

ECMAScript2019(ES10)でClassにPrivateが来る、かも?

Posted at

もう_を付与する必要は無い?

ECMAScript2019 (ES10)の情報がちらほら出てきておりますが、その中でも気になった"private class"のメモ。

これまでのClass

インスタンス内は全てPublicなプロパティ/メソッドとなっているのはご存知の通りです。
そもそもJavaScriptのClassは、classと言いつつ中身はprototypeなのでその辺を考えれば普通に違和感はありません。

隠したい場合は、名前の頭文字に_を付与するなどして「これは隠したいの!」と明示的にアピる必要がありました。
しかしこれはあくまで規約であって、仕様としての強制力は無いので、アクセスしようと思えば簡単に出来てしまいます。

これからのClass

C++などと同様に、インスタンス内にPrivateなプロパティ/メソッドを持つ事が可能となります。
当然、外部からのアクセスは仕様的に出来なくなります。
クラス本体のスコープに直接、プロパティ/メソッド/ゲッター/セッターを定義する事で可能になったそうです。

つかいかた

ES10_Class
class MyClass{
    constructor(){
        this.#privateProp = "";
        this.publicProp = "";
    }

    #privateMethod(){
        this.#privateProp = "Private!";
    }

    publicMethod(){
        this.publicProp = "Public!";
    }
}

新たに#構文文字が実装されます。
一目瞭然ですが、Privateにしたいプロパティ/メソッドは、先頭に#を付与します。
するとそれは、上記で説明した"本体直接定義"となる訳です。

ちなみにPublicなプロパティ/メソッドに関しては、従来通りそのままです。

ES10_Instance
const myClass = new MyClass();
myClass.#privateProp = "Overwrite"; // Error
myClass.#privateMethod();           // Error

おわりに

Google Chrome 73.0.3683.86 はまだ未対応でした。
ES10の中で一番便利そうだと感じたのはコレでしたが、他にも"Top Levelawait"など、地味に便利そうな機能がいくつかありました。

SpecialThanks!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0