【javascript】コンストラクタ関数のprivate変数にアクセスするdefinePropertyのgetとsetの使い方

コンストラクタ関数では、thisを使ってpublicな変数と、let,constを使ってprivateな変数を宣言することができます。

  • publicな変数はコンストラクタ関数をインスタンス化した後に、インスタンス化したオブジェクトからアクセス可能
  • privateな変数はコンストラクタ関数内の処理のみで参照可能

という違いがあります。

今回は、definePropertyを使って、privateな変数をインスタンス化した後のオブジェクトから参照する方法をご紹介します。

コンストラクタ関数におけるprivateな変数とpublicな変数の違い

このように、javascriptでは、コンストラクタ関数内で、let,constで変数を宣言するか、this…で関数のpropertyとして変数を宣言するかで、privateな変数かpublicな変数かを区別します。

上記のコンストラクタ関数の場合、インスタンス化した後に、a(private)にはアクセスできませんが、b(public)にはアクセスが可能です。

definePropertyを使って、privateな変数にアクセス可能にする。

definePropertyメソッドを使えば、コンストラクタ関数に対して、新しいpropertyを追加することが可能です。

そのため、そのpropertyの中で、privateな変数に対するget,setの動作を行うようにすれば、安全にprivate変数に対する処理を記述していくことができます。

また、getとsetは関数なので、

  • getするときに末尾に【円】をつけて、円表記で文字列を返す
  • setするときに、ドルに変換(計算)して登録する

など、処理を挟んでprivate変数にアクセスすることが出来ます。

ABOUTこの記事をかいた人

新卒でノマドワーカー(webデザイナー)として独立し、半年で月収100万円を達成する。その後、事務所を売却(バイアウト)したり、Youtuber(最高月間視聴回数109万回、チャンネル登録者1万人)をしたり、Openrecの公式配信者としてゲーム生実況をしたり、ベンチャー企業のCOOをしたり、パラレルキャリアを歩んできました。 2019年にミニマムライフコストを不労所得で稼げるようになったため、いまは、お金のことを考えずに、様々な企業でエンジニア修行をさせていただきながら、複数のメディアやアプリとweb制作事務所を運営しています。 趣味は株式投資(米国・日本株メイン)で、トレードを楽しむ日も多いです!