8.1 静的メソッドの宣言
JavaScriptの静的メソッドは、クラス自体に定義されるメソッドで、クラスのインスタンスにはありません。 これらはクラスで直接呼び出され、クラスによって生成されたオブジェクトでは呼び出されません。静的メソッドは、 クラスと関連があるが特定のオブジェクトには関係しないユーティリティ関数を作成するのによく使われます。
静的メソッドは、クラス本体のメソッド定義の前にstatic
キーワードを使って宣言されます。
例:
add
とmultiply
メソッドはstatic
キーワードを使って静的に宣言されている- これらのメソッドは
MathHelper
クラスで直接呼び出され、そのインスタンスでは呼び出されません
JavaScript
class MathHelper {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathHelper.add(5, 3)); // 8
console.log(MathHelper.multiply(5, 3)); // 15
8.2 静的メソッドの利用
静的メソッドは以下のシナリオで役立ちます:
- ユーティリティ関数: 静的メソッドは、クラスに関連する操作を行うユーティリティ関数の作成に使用できます。
- ファクトリーメソッド: 静的メソッドは、特定のロジックでクラスのインスタンスを作成するのに使用できます。
- データ処理: 静的メソッドは、クラスに関連するがクラスのインスタンスを作成する必要のないデータを処理するのに使用できます。
ユーティリティ関数の例:
StringUtil
クラスは、文字列を操作する静的メソッドcapitalize
とreverse
を含む- これらのメソッドは
StringUtil
クラスで直接呼び出される
JavaScript
class StringUtil {
static capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
static reverse(str) {
return str.split('').reverse().join('');
}
}
console.log(StringUtil.capitalize('hello')); // "Hello"
console.log(StringUtil.reverse('hello')); // "olleh"
ファクトリーメソッドの例:
静的メソッドfromObject
は、データオブジェクトからCar
クラスのインスタンスを作成します。
JavaScript
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
static fromObject(obj) {
return new Car(obj.brand, obj.model);
}
}
const carData = { brand: 'Toyota', model: 'Camry' };
const car = Car.fromObject(carData);
console.log(car.brand); // "Toyota"
console.log(car.model); // "Camry"
8.3 静的メソッドと継承
JavaScriptでは、静的メソッドは派生クラスによって継承されます。派生クラスは、基底クラスの静的メソッドを使用するか、オーバーライドすることができます。
静的メソッドの継承例:
- 静的メソッド
identify
はAnimal
クラスに定義され、Dog
クラスでオーバーライドされています - 両方のクラスで
identify
メソッドが呼び出されます
JavaScript
class Animal {
static identify() {
return 'This is an animal';
}
}
class Dog extends Animal {
static identify() {
return 'This is a dog';
}
}
console.log(Animal.identify()); // "This is an animal"
console.log(Dog.identify()); // "This is a dog"
8.4 他のメソッド内での静的メソッドへのアクセス
静的メソッドは、クラスの他のメソッド内でクラス名を使って呼び出すことができます。
例:
静的メソッドcalculateArea
は、Geometry
クラス内の別の静的メソッドdescribeCircle
内で、
this
キーワードを使って呼び出されます。このthis
はクラスGeometry
自体を指します。
JavaScript
class Geometry {
static calculateArea(radius) {
return Math.PI * radius * radius;
}
static describeCircle(radius) {
const area = this.calculateArea(radius);
return `A circle with radius ${radius} has an area of ${area.toFixed(2)}.`;
}
}
console.log(Geometry.describeCircle(5)); // "A circle with radius 5 has an area of 78.54."
8.5 静的メソッドとクラスインスタンス
静的メソッドはクラスのインスタンスで呼び出すことができません。インスタンスで静的メソッドを呼び出そうとするとエラーになります。
例:
静的メソッドadd
はCalculator
クラスで呼び出され、インスタンスcalc
では呼び出されません。
JavaScript
class Calculator {
static add(a, b) {
return a + b;
}
}
const calc = new Calculator();
console.log(Calculator.add(3, 4)); // 7
console.log(calc.add(3, 4)); // エラー: calc.add は関数ではありません
GO TO FULL VERSION