JavaScriptにおけるファクトリ関数とコンストラクタ関数
オブジェクトを一つずつ作成するのは間違いです。
もし100人のクラスメートがいて、それぞれに対してオブジェクトを作成する必要がある場合、個別にオブジェクトを記述すると問題が発生します。ロジックを何度も繰り返すことになります。また、バグが発生するリスクもあります。例えば、コードの後半で誤ってプロパティ名を上書きしてしまうかもしれません。
ロジックを再利用するための、より良い方法が必要です。
ファクトリ関数
工場を想像してみてください。原材料を投入すると、完成品が出てきます。ファクトリ関数も同じです。引数を受け取り、新しいオブジェクトを返します。
例:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
このアプローチでは、名前が安全に保たれます。名前は関数のスコープ内に留まるため、誤って変更してしまうことがありません。ロジックを一度書くだけで、何度も再利用できます。
コンストラクタ関数
コンストラクタ関数もオブジェクトを作成します。これらは this キーワードと new キーワードを使用します。慣習として、これらの関数は大文字で始めます。
例:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
new キーワードを使用すると、JavaScriptが代わりに処理を行ってくれます。新しいオブジェクトを作成し、それを this に割り当て、自動的に返します。return 文を書く必要はありません。
コードのスケーリング
これらのメソッドを配列と組み合わせることで、大量のデータを扱うことができます。
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
classmates.forEach(c => console.log(c.reply()))
これにより、コードがクリーンでスケーラブルになります。
主な目的はシンプルです:
- ロジックを一度だけ書く。
- どこでも再利用する。
- 繰り返しを避ける。
出典: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb