SSブログ

[JavaSctipt]オブジェクト指向の実装 [Programming JavaScript]

[はじめに]
JavaScriptの規格は、
ECMAScript(エクマスクリプト)で定められています。

JavaScriptは時代と共に進化しており、
最近のブラウザの大半は、
ECMAScriptのバージョンとして、ES6(ES2015)以降を取り入れています。

ES6(ES2015)は、
クラスなど、オブジェクト指向の概念を取り込んでおり、
最近のソースでもクラスの記載が散見されます。

たまに使うこともあるので、備忘録として、
クラスを用いたサンプルソースを掲載します。
//【クラス定義(Person.js)】
class Person{

   //【プロパティの初期化】 ※Start
   // ※ES6(ES2015)までは、
   //   プロパティを設定する場合は、
   //   必ずコンストラクタ内で実施する必要がありました。
   //   ES2022から、
   //   クラスのトップレベルで
   //   プロパティを宣言できるようになりました。
   //   また、プロパティ名の先頭に「#」を付加することで、
   //   Private指定となります。(ES2022から)
   //   [注意]
   //     但し、ES2022以降のバージョンは、
   //     古いブラウザでは
   //     機能が実装されていない可能性がある為、注意が必要です。

   //名前
   #_name = {first:"権兵衛", last:"名無し"};
   //生年月日
   #_birthday = this.#getSystemDate();

   //【プロパティの初期化】 ※End

   //【コンストラクタ定義】 ※Start
   // ※インスタンス化の際に実行されるメソッド。

   constructor(name, birthday){
      this.#_name = name;
      this.#_birthday = birthday;
   }

   //【コンストラクタ定義】 ※End

   //【ゲッター/セッター定義】 ※Start
   // ※ES6(ES2015)までは、
   //   ゲッター/セッターを実装するには、
   //   Javaのようにメソッド(getXXX() / setXXX())で
   //   定義する必要がありましたが、
   //   ES2022から、
   //   ゲッター/セッター向けの構文を利用できるようになりました。
   //   [注意]
   //     但し、ES2022以降のバージョンは、
   //     古いブラウザでは
   //     機能が実装されていない可能性がある為、注意が必要です。

   //名前
   get fullName(){
      return this.#_name.first + " " + this.#_name.last;
   }

   //生年月日
   get birthday(){
      return this.#_birthday;
   }

   //生年月日
   set birthday(value){
      this.#_birthday = value;
   }

   //【ゲッター/セッター定義】 ※End


   //【メソッド定義(Public)】 ※Start
   // ※他の関数と同様に定義することで、
   //   Publicなメソッドを定義できます。

   //あいさつをする。
   sayHello(){
      window.alert(
         "こんにちは。" + 
         this.#_name.first + " " + 
         this.#_name.last + "です。");
   }

   //生年月日を出力する。
   sayBirthDay(){
      window.alert(this.#_birthday);
   }

   //年齢を出力する。
   sayAge(){
      let age = this.#calculateAge();
      window.alert("私は" + age + "歳です。");
   }

   //【メソッド定義(Public)】 ※End

   //【メソッド定義(Private)】 ※Start
   //※メソッド名の先頭に「#」を付加することで、
   //  アクセス元を自クラス内に限定(Private)することができます。
   //   [注意]
   //     但し、ES2022以降のバージョンは、
   //     古いブラウザでは
   //     機能が実装されていない可能性がある為、注意が必要です。

   //システム日付を取得する。
   #getSystemDate(){
      const rtn = new Date();
      return rtn;
   }

   //年齢を算出する。
   #calculateAge(){
      let sysDate = this.#getSystemDate();
      let age = sysDate.getFullYear() - this.#_birthday.getFullYear();

      if(sysDate.getMonth() * 100 + sysDate.getDate() < 
         this.#_birthday.getMonth() * 100 + this.#_birthday.getDate())
      {
         //システム日付が誕生日前の場合は、
         //年齢を [システム日付の年] - [生年月日の年] - 1 とする。
         return age - 1;
      }

      //システム日付が誕生日以降の場合は、
      //年齢を [システム日付の年] - [生年月日の年] とする。
      return age;
   }

   //【メソッド定義(Private)】 ※End
}
[JavaScript]オブジェクト指向を意識したコード


<html>
<head>

<script language="javascript" src="./Person.js"></script>
<script language="javascript" >
   //クラスへのアクセス
   function sayHello()
   {
      const person = new Person(
         {first:"太郎", last:"山田"},
         new Date(1953,8-1,15));
      person.sayHello();
   }

   function sayBirthDay()
   {
      const person = new Person(
         {first:"太郎", last:"山田"},
         new Date(1953,8-1,15));
      person.sayBirthDay();
   }

   function sayAge()
   {
      const person = new Person(
         {first:"太郎", last:"山田"},
         new Date(1953,8-1,15));
      person.sayAge();
   }
</script>
</head>
<body bgcolor="azure">

<input type="button" value="あいさつをする。" onclick="sayHello();"><br/>
<input type="button" value="生年月日を言う。" onclick="sayBirthDay();"><br/>
<input type="button" value="年齢を言う。" onclick="sayAge();"><br/>

</body>
</html>
[JavaScript]使用例

[実行結果]
JavaScript実行結果.PNG

nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。