JavaScriptにおけるファクトリ関数とコンストラクタ関数
オブジェクトを一つずつ手動で作成するのは間違いです。
ユーザーやクラスメートごとに手動でオブジェクトを書くと、コードの重複が発生します。100人のユーザーがいる場合、同じロジックを100回書くことになります。これはバグの原因となります。後で誤ってプロパティを変更してしまい、アプリケーションが壊れてしまうかもしれません。
クリーンなコードを書くために、代わりにこれら2つのパターンを使用しましょう。
1. ファクトリ関数
本物の工場を想像してみてください。原材料が投入され、完成品が出てきます。
ファクトリ関数は、引数を受け取り、新しいオブジェクトを返します。
例:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
メリット:
- ロジックを一度書くだけで済みます。
- 新しいオブジェクトごとにその関数を再利用できます。
- データが安全に保たれます。
nameは関数スコープ内に保持されるため、外部から誤って上書きすることができません。
2. コンストラクタ関数
コンストラクタ関数もオブジェクトを作成します。これらは new キーワードと this キーワードを使用します。慣習として、これらは大文字で始めます。
例:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
new を使用すると、JavaScriptが以下の処理を自動的に行います:
- 新しいオブジェクトを作成します。
- それを
thisに割り当てます。 - オブジェクトを自動的に返します。
return 文を書く必要はありません。
コードのスケーリング
これらのパターンを配列と組み合わせることで、大量のデータを扱うことができます。すべての名前を手入力する代わりに、map 関数を使用しましょう。
例:
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
これで、すぐに使えるオブジェクトのリストが用意できました。
まとめ:
- 重複を防ぐため、手動でのオブジェクト作成は避けましょう。
- ロジックをカプセル化し、データを保護するにはファクトリ関数を使用します。
- 自動的なオブジェクト作成のために
newキーワードを活用するには、コンストラクタ関数を使用します。 - 常にロジックは一度だけ書き、あらゆる場所で再利用するようにしましょう。
出典: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb