→
開発者はユーザー定義のオブジェクト型やコンストラクタ関数を持つ組み込みオブジェクト型のインスタンスを作成することができます。
constructor | オブジェクト インスタンスの型を指定するクラス名または関数名です。 |
---|---|
arguments | constructor が呼び出される際の引数のリストです(カンマで区切る)。 |
new 演算子は次のことを行います:
ユーザー定義のオブジェクトを生成するには、2 つのステップが必要です:
オブジェクトの型を定義するために、オブジェクトの名称やプロパティを指定する、オブジェクトの型のための関数を作成します。オブジェクトは、別のオブジェクトそのものをプロパティとして持つことができます。後述の例をご覧ください。
コード「new Foo(...)」を実行すると、以下の処理が行われます:
以前生成したオブジェクトに、いつでもプロパティを追加できます。例えば「car1.color = "black"」という構文は、color プロパティを car1 に追加して、値として "black" を代入します。しかし、これは他のオブジェクトには影響を与えません。同じ型のすべてのオブジェクトに新たなプロパティを追加するには、Car オブジェクト型の定義に対してプロパティを追加しなければなりません。
Function.prototype プロパティを使用して、以前定義したオブジェクトに対して共有のプロパティを追加できます。これはオブジェクト型のあるインスタンスのプロパティではなく、関数を使用して生成したすべてのオブジェクトで共有するプロパティを定義します。以下のコードでは Car 型のオブジェクトすべてに対して color プロパティを値 "original color" で定義しています。また、インスタンスオブジェクト car1 の color プロパティに文字列の値 "black" を上書きしています。詳しくは prototype をご覧ください。
コンソールにて function Car() {} car1 = new Car(); car2 = new Car(); console.log(car1.color); // undefined Car.prototype.color = "original color"; console.log(car1.color); // original color car1.color = 'black'; console.log(car1.color); // black console.log(car1.__proto__.color) //original color console.log(car2.__proto__.color) //original color console.log(car1.color) // black console.log(car2.color) // original color
new 演算子を記述しなかった場合、コンストラクターは通常の関数として扱われ、オブジェクトを作成しません。その際、this の値も異なるものになります。
function Car(make, model, year) { this.make = make; this.model = model; this.year = year; }
これで、以下のように mycar という名前のオブジェクトを生成できます。
var mycar = new Car('Eagle', 'Talon TSi', 1993);
class Sqr{ constructor(P1, P2) { this.area = P1 * P2; } } D=new Sqr(10, 20);