コンストラクタ関数の使用
もう 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 というオブジェクトの種類の定義に追加する必要があります。