JavaScriptのクラスフィールドとメソッドで強化されたオブジェクト指向プログラミング
- 作成日 2025.02.03
- javascript
- javascript
JavaScriptのクラス機能により、オブジェクト指向プログラミングがさらに効率的に行えるようになりました。本記事では、クラスフィールドとメソッドを活用して、より直感的で強力なコードを書くための技法を解説します。
目次
クラスフィールドの基本
クラスフィールドを使用すると、クラスプロパティを簡潔に定義できます。
class Person {
name = 'John';
age = 30;
}
const person = new Person();
console.log(person.name); // John
console.log(person.age); // 30静的フィールドの利用
クラス全体で共有するプロパティを定義するには静的フィールドを使用します。
class Counter {
static count = 0;
increment() {
Counter.count++;
}
}
const counter = new Counter();
counter.increment();
console.log(Counter.count); // 1プライベートフィールドの使用
プライベートフィールドを用いることで、外部からアクセスできないプロパティを作成できます。
class BankAccount {
#balance = 0;
deposit(amount) {
this.#balance += amount;
}
getBalance() {
return this.#balance;
}
}
const account = new BankAccount();
account.deposit(100);
console.log(account.getBalance()); // 100
console.log(account.#balance); // エラーメソッド定義の基本
クラスのメソッドを定義して、オブジェクトの振る舞いを記述します。
class Greeter {
greet() {
console.log('Hello, world!');
}
}
const greeter = new Greeter();
greeter.greet(); // Hello, world!ゲッターとセッター
クラスのプロパティに対してカスタムロジックを追加するために、ゲッターとセッターを使用します。
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
get area() {
return this.width * this.height;
}
set area(value) {
this.width = Math.sqrt(value);
this.height = Math.sqrt(value);
}
}
const rect = new Rectangle(4, 5);
console.log(rect.area); // 20
rect.area = 36;
console.log(rect.width, rect.height); // 6, 6継承を活用したコード再利用
クラスを継承することで、コードの再利用性を向上させます。
class Animal {
speak() {
console.log('Animal speaks');
}
}
class Dog extends Animal {
speak() {
console.log('Dog barks');
}
}
const dog = new Dog();
dog.speak(); // Dog barksメソッドオーバーライド
親クラスのメソッドをオーバーライドして、カスタム動作を実現します。
class Vehicle {
start() {
console.log('Vehicle starts');
}
}
class Car extends Vehicle {
start() {
console.log('Car starts');
}
}
const car = new Car();
car.start(); // Car startsスーパーメソッドの呼び出し
スーパークラスのメソッドを呼び出して、追加の処理を行います。
class Parent {
greet() {
console.log('Hello from Parent');
}
}
class Child extends Parent {
greet() {
super.greet();
console.log('Hello from Child');
}
}
const child = new Child();
child.greet();
// Hello from Parent
// Hello from Childクラスフィールドと関数バインディング
クラスフィールドを使用すると、関数のバインディングが簡単になります。
class Button {
label = 'Click me';
handleClick = () => {
console.log(this.label);
};
}
const button = new Button();
document.body.addEventListener('click', button.handleClick);クラスでのデフォルト値設定
フィールドにデフォルト値を設定することで、クラスの初期状態を明確にできます。
class Config {
theme = 'light';
language = 'en';
}
const config = new Config();
console.log(config.theme); // light
console.log(config.language); // enクラスを使ったユーティリティオブジェクト
クラスを使用して、機能をカプセル化したユーティリティオブジェクトを作成します。
class MathUtil {
static add(a, b) {
return a + b;
}
static subtract(a, b) {
return a - b;
}
}
console.log(MathUtil.add(5, 3)); // 8
console.log(MathUtil.subtract(5, 3)); // 2まとめ
クラスフィールドとメソッドを活用すると、オブジェクト指向プログラミングがより直感的になり、コードの保守性と再利用性が向上します。JavaScriptの最新機能を使用して、より効率的で強力なプログラムを構築してください。
-
前の記事
Rubyのエラー『ScriptError: load error』の解決方法 2025.02.03
-
次の記事
Rubyのエラー『Errno::ETIMEDOUT: Connection timed out』の解決方法 2025.02.03
コメントを書く