ファクトリ関数
シンプルにいうと、オブジェクトを返す関数のこと。
ただ、コンストラクター関数のようにnew
キーワードをつけるのではなく、関数そのものがオブジェクトを返す関数のことを意味する。
ファクトリ関数の特徴
-
new
キーワードを使う必要がない。 - よって関数内で
this
も使う必要もない。
ファクトリ関数の例
コンストラクター関数をもってオブジェクトを生成する際には以下のようなコードになる。
javascript
// コンストラクター関数の書き方
function createCar(maker, carName, year) {
this.maker = maker,
this.carName = carName,
this.year = year
}
const car1 = new createCar(bonda, 'プリアス', 2022)
上記のようにいちいちthis
を指定しておき、使う時もnew
キーワードを使わなければならない。
しかし、ファクトリ関数は以下のように表現する。
javascript
// ファクトリ関数の書き方
function createCar(maker, carName, year) {
return {
maker,
carName,
year
}
}
const car1 = createCar(bonda, 'プリアス', 2022)
ファクトリ関数の利点
① 関数内でデータを加工してオブジェクトを返すことができる。
ものによっては受け取った引数をそのまま使わす、加工してからオブジェクトを返したい場合がある。
ファクトリ関数を使うと、これらができる利点がある。
もちろんコンストラクタ関数にメソットを追加して加工することも可能であるが、ファクトリ関数ではメソットを使わずに加工できるので、より簡単でもある。
javascript
// コンストラクター関数の書き方
function createCar(maker, carName, year) {
this.maker = maker,
this.carName = carName,
this.year = year
this.inst = functions() {
return `この車は、${year}年に${maker}が造った${carName}です。`
}
const car1 = new createCar(bonda, 'プリアス', 2022)
const inst = car1.inst()
console.log(inst) // この車は、2022年にbondaが造ったプリアスです。
ファクトリ関数だと以下のようになる。
javascript
// ファクトリ関数の書き方
function createCar(maker, carName, year) {
return `この車は、${year}年に${maker}が造った${carName}です。`
}
const car1 = createCar(bonda, 'プリアス', 2022)
console.log(car1) // この車は、2022年にbondaが造ったプリアスです。
② スコープ内の変数を利用することができる。
以下のコードだと、ceateBook
の関数の外にpages
の変数があるが、こと関数を実行すると、関数内のpages
の変数が参照される。
このことによって、関数の外と内の変数を区別して使用することができる。
javascript
let pages = 10;
function createBook(title) {
let pages = 1;
let read = function() {
console.log(`${title}を ${pages++} ページ読みました。`);
};
return {title, read};
}