コンストラクタ関数の使用

コンストラクタ関数の使用

もう 1 つの方法として、次の 2 つのステップでオブジェクトを作成することができます。

  1. コンストラクタ関数を書くことでオブジェクトの種類を定義する。
  2. new を用いてそのオブジェクトのインスタンスを作成する。

オブジェクトの種類を定義するために、その名前、プロパティ、メソッドを定義する関数を作成する必要があります。例えば、車についてのオブジェクトの種類を作成したいとします。そしてこの種類のオブジェクトに car という名前を付け、make、model、および year というプロパティを持たせたいとします。こうするためには次のような関数を書きます。

function car(make, model, year) {
   this.make = make;
   this.model = model;
   this.year = year;
}

関数に渡された値に基づいてオブジェクトのプロパティに値を代入するために this を使用しています。

すると、次のようにして mycar というオブジェクトを作成することができるようになります。

mycar = new car("Eagle", "Talon TSi", 1993);

この文は mycar を作成し、そのプロパティ用に指定した値を代入します。その結果、mycar.make の値は "Eagle" という文字列、mycar.year は 1993 という整数というようになります。

new を呼び出すことで car オブジェクトをいくらでも作ることができます。

kenscar = new car("Nissan", "300ZX", 1992);
vpgscar = new car("Mazda", "Miata", 1990);

それ自身別のオブジェクトであるというようなプロパティを持つオブジェクトを作ることができます。例えば、次のように person というオブジェクトを定義するとします。

function person(name, age, sex) {
   this.name = name;
   this.age = age;
   this.sex = sex;
}

そして、次のように 2 つの新しい person オブジェクトのインスタンスを作成します。

rand = new person("Rand McKinnon", 33, "M");
ken = new person("Ken Jones", 39, "M");

次のようにして、car の定義を書き換えて、person オブジェクトをとる owner プロパティを持たせることができます。

function car(make, model, year, owner) {
   this.make = make;
   this.model = model;
   this.year = year;
   this.owner = owner;
}

新しいオブジェクトのインスタンスを作成するために、次のようにします。

car1 = new car("Eagle", "Talon TSi", 1993, rand);
car2 = new car("Nissan", "300ZX", 1992, ken);

新しいオブジェクトの作成時に文字列リテラルや整数値を渡す代わりに、上記の文ではオブジェクト rand および ken を所有者を表す引数として渡しています。car2 の所有者の名前を知りたい場合は次のプロパティにアクセスすることで可能になります。

car2.owner.name

以前に定義したオブジェクトにいつでもプロパティを追加できることに注意してください。例えば次の文

car1.color = "black"

はプロパティ color を car1 に追加し、それに "black" という値を代入します。しかしながら、この方法では他のどのオブジェクトにも影響を与えません。同じ種類の全オブジェクトに新しいプロパティを追加するには、そのプロパティを car というオブジェクトの種類の定義に追加する必要があります。

ドキュメントのタグと貢献者

 このページの貢献者: ethertank, happysadman, Mgjbot, Electrolysis
 最終更新者: ethertank,