ファクトリ関数とは

ファクトリ関数

シンプルにいうと、オブジェクトを返す関数のこと。
ただ、コンストラクター関数のようにnewキーワードをつけるのではなく、関数そのものがオブジェクトを返す関数のことを意味する。

ファクトリ関数の特徴

  • newキーワードを使う必要がない。
  • よって関数内でthisも使う必要もない。

ファクトリ関数の例

コンストラクター関数をもってオブジェクトを生成する際には以下のようなコードになる。

// コンストラクター関数の書き方
function createCar(maker, carName, year) {
  this.maker = maker,
  this.carName = carName,
  this.year = year
}

const car1 = new createCar(bonda, 'プリアス', 2022)

上記のようにいちいちthisを指定しておき、使う時もnewキーワードを使わなければならない。
しかし、ファクトリ関数は以下のように表現する。

// ファクトリ関数の書き方
function createCar(maker, carName, year) {
  return {
    maker,
    carName,
    year
  }
}

const car1 = createCar(bonda, 'プリアス', 2022)

ファクトリ関数の利点

① 関数内でデータを加工してオブジェクトを返すことができる。

ものによっては受け取った引数をそのまま使わす、加工してからオブジェクトを返したい場合がある。
ファクトリ関数を使うと、これらができる利点がある。
もちろんコンストラクタ関数にメソットを追加して加工することも可能であるが、ファクトリ関数ではメソットを使わずに加工できるので、より簡単でもある。

// コンストラクター関数の書き方
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が造ったプリアスです。

ファクトリ関数だと以下のようになる。

// ファクトリ関数の書き方
function createCar(maker, carName, year) {
  return `この車は、${year}年に${maker}が造った${carName}です。`
}

const car1 = createCar(bonda, 'プリアス', 2022)
console.log(car1) // この車は、2022年にbondaが造ったプリアスです。

② スコープ内の変数を利用することができる。

以下のコードだと、ceateBookの関数の外にpagesの変数があるが、こと関数を実行すると、関数内のpagesの変数が参照される。
このことによって、関数の外と内の変数を区別して使用することができる。

let pages = 10;
function createBook(title) {
  let pages = 1;

  let read = function() {
        console.log(`${title}を ${pages++} ページ読みました。`);
  };
  return {title, read};
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です