🚀
クラスについて整理
【名前空間としてのクラス(=ステートレスオブジェクト)】
- staticがメンバ変数とメソッドの前に付いている
- インスタンス化せずに使う
test.js
class Circle {
static PI = 3.14;
static perimeter(radius){
return 2 * Circle.PI * radius;
}
static area(radius){
return Circle.PI * radius * radius;
}
}
console.log(Circle.perimeter(4));
//25.12
【インスタンス化して使うクラス】
- 上記の「名前空間としてのクラス」と比較すれば分かるように、staticが付いてない
- インスタンスを生成するコンストラクタがある
test.js
class Counter {
constructor() {
this.count = 0;
}
// `increment`メソッドをクラスに定義する
increment() {
// `this`は`Counter`のインスタンスを参照する
this.count++;
}
}
const counterA = new Counter();
const counterB = new Counter();
// `counterA.increment()`のベースオブジェクトは`counterA`インスタンス
counterA.increment();
// 各インスタンスの持つプロパティ(状態)は異なる
console.log(counterA.count); // => 1
console.log(counterB.count); // => 0
【参考】
Discussion