
6.1
ファクトリ
149
て新しいインスタンスを生成してもよいですし、プロトタイプと演算子
new
を使っても、
Object.
create()
を使っても、さらには特定の条件下では異なるインスタンスを返すことさえ可能です。利
用者側では、生成方法についてはまったく関知しません。
new
を使うとオブジェクトの生成法が限定
されてしまいますが、
JavaScript
では特別な負担なくもっとずっと柔軟にできるのです。ちょっとし
た例として、次のような
Image
のオブジェクトを生成する単純なファクトリを考えてみましょう(
01_
factory_simple_a/factory.js
)。
function createImage(name) {
return new Image(name);
}
const image = createImage('photo.jpeg');
ファクトリ
createImage()
は不要ではないかと思うかもしれません。なぜ
new
を使ってクラス
Image
から直接インスタンス化しないのでしょうか。次のようなコードではいけないのでしょうか?
const image = new Image(name);
既に述べたように、
new
を使うと、コードは特定のタイプのオブジェクトに縛られてしまいます。上
の例では
Image
のオブジェクトです。ファクトリならばもっとずっと柔軟にできます。クラス
Image
を
改変して小さいクラスに分割し、サポートするフォーマットにそれぞれ対応するようにしようと思った
とします