オブジェクトについて[コンストラクタ関数][new演算子]

2017年1月21日

コンストラクタ関数によるオブジェクト生成の説明をいたします。一般的な関係式は以下のようになります。

 

var 変数 = new コンストラクタ関数

 

コンストラクタ関数をnew演算子で指定すると、オブジェクトのインスタンスが生成されます。このようにnew演算子によってオブジェクトを生成することをインスタンス化と呼びます。上記関係式では、生成されたインスタンスへの参照が、変数へ代入されている形となっています。

 

コンストラクタ関数自体もオブジェクトであるので、new演算子で指定したオブジェクトと同じ構造を持つオブジェクトが新しく生成されています。つまり、コンストラクタ関数は新しいオブジェクトを生成するための関数とも言えます。

 

内部的には、指定したオブジェクトのコンストラクタが呼び出されています。コンストラクタは、prototypeというプロパティを持つオブジェクトです。つまるところ、全てのオブジェクトは、このprototypeプロパティを持っています。

 

コンストラクタ関数には、ユーザが独自に作成する関数と、JavaScriptにあらかじめ組み込まれている「組み込みコンストラクタ(ビルトインオブジェクトのコンストラクタ)」が存在します。

 

 

スポンサーリンク

 

 

関連ページ

オブジェクトについて[オブジェクトリテラル][プロパティ][メソッド]

 

オブジェクトについて[Object.create()]

 

 

まずはあらためて、オブジェクトリテラルによってオブジェクトを生成してみます。

 

 

次に、上記と同じオブジェクトを組み込みコンストラクタによって生成してみます。

 

1行目のObject()は、組み込みコンストラクタです。組み込みコンストラクタには他にArray()、Date()、String()等があります。

 

1行目において、Object()コンストラクタにnew演算子を指定し、Objectオブジェクト「obj」を生成しています。

 

 

次にコンストラクタ関数を自分で定義して、オブジェクトを生成してみます。

 

 

1〜6行目においてBookコンストラクタ関数を作成しています。

 

thisの参照先は新しく生成することになるオブジェクト自身(インスタンス)を指します。コンストラクタ関数は自動的にインスタンス自身(this.〜)を返すので戻り値は必要ありません。

 

関連ページ

thisキーワードについて

 

コンストラクタ関数自体は通常の関数と同じですが、new演算子でオブジェクトを生成するための(ために作られた)関数であることを明示的にするため、始めの文字は大文字にすることが慣習的となっています。

 

上記のBook()関数は、new演算子を利用しなくても変数に代入することが可能です。

 

 

しかし、new演算子を利用しないでBook関数を呼び出した場合、Book関数にはreturn文が無く、値を返していないので、10行目においてundefinedとなってしまいます。また、titleはグローバルオブジェクトとして認識されてしまいます。※strictモード(ECMAScript5)ではthisはグローバルオブジェクトにはなりません。

 

このような場合は、以下のようにして対処することも可能です。

 

instanceof演算子でオブジェクトの型が、Book型かどうかを判定しています。

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー