staticとインスタンスの役割
static
- staticプロパティ(変数)とメソッド(関数)はクラスに関連付けられており、インスタンスではなくクラス自体に属します。
- クラス名を使ってアクセスすることが求められます。
- インスタンスからはアクセスできない。
- staticプロパティ(変数)はクラスの全体で共有されるため、すべてのインスタンスが同じ値を参照します。
- staticメソッド(関数)はクラスの機能として提供されます。
インスタンス
- インスタンスプロパティ(変数)は各インスタンスごとに異なる値を持ちます。
具体的なコードで解説
class StaticMembers {
// static プロパティ
static stNum: number = 0;
// インスタンスプロパティ
num: number = 0;
// static メソッド
static countUp(value: number) {
StaticMembers.stNum += value;
}
// インスタンスメソッド
countUp(value: number) {
StaticMembers.stNum += value;
this.num += value;
}
}
// インスタンスを2つ作成
const staticA = new StaticMembers(); // (1)
const staticB = new StaticMembers(); // (1)
// AのcountUp()を引数10で実行
staticA.countUp(10);
// Aのプロパティをそれぞれ出力
console.log(`staticAのstNum: ${StaticMembers.stNum} num: ${staticA.num}`);
// 出力する値: staticAのstNum: 10 num: 10
// BのcountUp()を引数5で実行
staticB.countUp(5);
// Bのプロパティをそれぞれ出力
console.log(`staticBのstNum: ${StaticMembers.stNum} num: ${staticB.num}`);
// 出力する値: staticAのstNum: 15 num: 5
// StaticMembersのstaticプロパティのみ出力
console.log(`stNum: ${StaticMembers.stNum}`);
// 出力する値: 15
参考URL