クラスのメソッドをアロー関数にするメリットとデメリット
クラスの中でメソッドを「通常の関数」として書くか「アロー関数」として書くかで、挙動や効率が変わります。初心者向けに整理してみましょう。
メリット(アロー関数にする利点)
thisがインスタンスに固定される- アロー関数は「定義されたときの
this」を保持するので、呼び出し方に左右されません。コールバックやイベント処理でthisが迷子にならない。
- アロー関数は「定義されたときの
class Counter {
count = 0;
increment = () => {
this.count++;
console.log(this.count);
}
}
const c = new Counter();
const f = c.increment;
f(); // 1(thisがインスタンスに固定されている)
JavaScriptbind不要- 通常のメソッドだと
thisを固定するために.bind(this)を使うことが多いですが、アロー関数なら不要。
- 通常のメソッドだと
- イベントハンドラや非同期処理で便利
setTimeoutやaddEventListenerに渡すときに、外側のthis(インスタンス)をそのまま使える。
⚠️ デメリット(注意点)
- インスタンスごとに関数が生成される
- 通常のメソッドはクラスの「プロトタイプ」に1つだけ作られる。
- アロー関数は「インスタンスのプロパティ」として作られるので、インスタンスを作るたびに新しい関数オブジェクトが生成される。
- → インスタンスが大量にあるとメモリ効率が悪くなる。
- プロトタイプチェーンに載らない
- 通常のメソッドは
Person.prototype.sayHelloのようにプロトタイプに存在する。 - アロー関数はインスタンスのプロパティなので、
prototypeには現れない。 - → 継承やメソッドの上書き(オーバーライド)がしにくい。
- 通常のメソッドは
superが使えない- アロー関数はクラスの「メソッド」ではなく「プロパティ」なので、
superキーワードで親クラスのメソッドを呼ぶことができない。
- アロー関数はクラスの「メソッド」ではなく「プロパティ」なので、
まとめ(使い分けの指針)
- アロー関数を使うと便利な場面
- コールバックやイベントで
thisを固定したいとき - インスタンスごとに独自の関数を持たせたいとき
- コールバックやイベントで
- 通常のメソッドを使うべき場面
- 多数のインスタンスを作るクラス(効率重視)
- 継承やオーバーライドを使う設計
- プロトタイプにメソッドをまとめたいとき
👉 初心者向けに一言でまとめると:
「アロー関数はthis迷子防止に便利。でも効率や継承を考えるなら通常メソッド」
