MILK2016/5/19更新JavaScriptのコンストラクタによるインスタンス生成16タイトルとURLをコピーJavaScriptはオブジェクト指向言語ですが、JavaやC++のようなクラスベースではなく、プロトタイプベースのオブジェクト指向です(注1)。ここでは、JavaScriptにおけるインスタンスの生成方法について説明します。ここではnew演算子とコンストラクタを使って新たに生成するオブジェクトを特にインスタンスと呼ぶことにします。(注1)ECMA6からはクラス構文が導入されていますが、現状では必ずしも全てのブラウザが対応しているわけではないようです。JavaScriptにおけるオブジェクトJavaやC++といったクラスベースのオブジェクト指向言語では、クラスを元にインスタンスを生成します。JavaScriptには基本的にはクラスという概念はなく、オブジェクトの作成には以下の2通りがあります。オブジェクト初期化子を用いるコンストラクタからインスタンスを作成する空のオブジェクトを作成する以下は、実際に2通りの方法で空のオブジェクトを作る例です。Sample();次より、コンストラクタに関してより詳しく説明していきます。コンストラクタとはJavaScriptでは、関数もオブジェクトであり「関数オブジェクト」と呼びます。コンストラクタは、オブジェクトの定義をするための関数で、コンストラクタ関数とも呼びます。関数オブジェクトつまり、コンストラクタとは、関数オブジェクトのことを指します。全ての関数はコンストラクタになることができます。実際には、インスタンス生成のための関数をコンストラクタと呼びます。new演算子によるインスタンス生成インスタンスの生成には、new演算子とコンストラクタを使います。コンストラクタでは、thisキーワードを使いオブジェクトの定義します。通常、コンストラクタにはreturn文はありません。new演算子で呼び出された時の働きnew演算子を使って呼び出されると、コンストラクタ内の処理を実行した上で次のような特別な働きをします。次の例では中身を持たないコンストラクタを定義し、最も単純な空のインスタンスを生成しています。Person();これでPersonというオブジェクトからper1インスタンスを生成することができました。通常、コンストラクタはインスタンスの初期化を行います。具体的には、生成するインスタンスで共有するプロパティ(変数やメソッド)をコンストラクタで定義します。次の例は、先程のPersonコンストラクタでname、age、singというプロパティを初期化しています。この時、thisは新たに生成されるインスタンス自身を表わします。//LaLaLa生成したインスタンスのプロパティを利用するには、「インスタンス名.プロパティ名」あるいは「インスタンス名['プロパティ名']のように書きます。生成したインスタンスにプロパティを追加するコンストラクタから生成したインスタンス自体にプロパティを追加することもできます。その場合、追加したプロパティはそのインスタンス以外から参照することはできないことに注意して下さい。//エラーここでは、per1インスタンスにsingプロパティを追加し、per1.sing()のようにメソッドとして呼び出しています。per2インスタンスには影響しません。MILKはより良いサービスやプロダクトを作りたい人のためのメディアです。