ray88’s diary

お仕事で困ったとき用の自分用の覚書

JavaScript 静的メンバー

JavaScript 目次 - ray88’s diary
静的メンバー
 クラスに定義するメンバーにはインスタンスに対して使用するのではなく、
 インスタンス化しなくても直接的に使用できるプロパティおよびメソッドを
 定義することができ、それぞれ静的プロパティ、静的メソッドという。
 それらをまとめて静的メンバーという。

静的メンバーのメリット
 クラスと静的メンバーをグローバル領域に定義すればグローバル変数やグローバル関数
 と同様に プロジェクトのどこからでも利用できるプロパティ・メソッドとなる。
 しかし、静的メンバーはクラスを指定してアクセスするため、他の変数と競合すること
 を避けられるというメリットがある

JavaScriptの組み込みオブジェクトやGASのクラスでは多くの静的メンバーが
 用意されている。例えばMathオブジェクトに至ってはそのすべてが
 静的メンバーです。

【構文】

クラス名.プロパティ名

【構文】

クラス名.メソッド名(引数1,引数2,・・・)

【構文】
クラスに静的プロパティを追加するには、クラスを定義するclass文の後に書きの様に記述する

クラス名.プロパティ名 = 値

【構文】
クラスに静的メソッドを追加するには、クラスを定義するclass文内に以下の様に
staticキーワードを付与したメソッド定義を記述する

static クラス名.メソッド名(仮引数1,仮引数2,・・・){
      //処理
}

【構文】
静的プロパティと同様に、class文の後に関数リテラルを代入することでも
静的メソッドの定義は可能

static クラス名.メソッド名 = function(仮引数1,仮引数2,・・・){
      //処理
}

【サンプルコード】

function myFunction(){
  //クラス「Person」を定義
  class Person{
    constructor(name,age){
      //thisキーワードを用いてnameプロパティ、ageプロパティを定義
      this.name = name;
      this.age = age;
    }
    //クラスPersonに静的メソッドgreetを追加
    static greet(name){
      console.log(`Hello! I am ${name}!`);
    }  
  }
  //クラスPersonに静的プロパティjobを追加
  Person.job = 'Engineer';
   
 console.log(Person.job);
 Person.greet('Bob');
}