1. ホーム
  2. javascript

[解決済み] コンストラクタ関数とファクトリ関数の比較

2022-04-21 06:54:35

質問

Javascriptのコンストラクタ関数とファクトリ関数の違いを明確にすることができますか?

どのような場合にどちらかを使うのでしょうか?

どのように解決するのですか?

基本的な違いは、コンストラクタ関数に new キーワード(JavaScript が自動的に新しいオブジェクトを作成し、そのオブジェクトに this 関数内でそのオブジェクトを指定し、そのオブジェクトを返します)。

var objFromConstructor = new ConstructorFunction();

ファクトリー関数は、通常の関数と同じように呼び出されます。

var objFromFactory = factoryFunction();

しかし、これをファクトリーと呼ぶには、何らかのオブジェクトの新しいインスタンスを返す必要があります。のように自動的に行われるわけではありません。 new しかし、いくつかのケースでは、より柔軟な対応が可能になります。

本当に簡単な例では、上記の関数は次のようになります。

function ConstructorFunction() {
   this.someProp1 = "1";
   this.someProp2 = "2";
}
ConstructorFunction.prototype.someMethod = function() { /* whatever */ };

function factoryFunction() {
   var obj = {
      someProp1 : "1",
      someProp2 : "2",
      someMethod: function() { /* whatever */ }
   };
   // other code to manipulate obj in some way here
   return obj;
}

もちろん、この単純な例よりもはるかに複雑なファクトリー関数を作ることができます。

ファクトリー関数の利点は、返されるオブジェクトが何らかのパラメータによって複数の異なる型になる可能性がある場合です。