すべての JavaScript オブジェクトにはプロトタイプがあります。プロトタイプもオブジェクトです。
すべての JavaScript オブジェクトは、プロパティとメソッドをプロトタイプから継承します。
すべての JavaScript オブジェクトは、プロトタイプからプロパティとメソッドを継承します。
オブジェクト・リテラルまたは new Object() を使用して作成されたオブジェクトは、 Object.prototype というプロトタイプを継承します。
new Date() で作成されたオブジェクトは、Date.prototype を継承します。
Object.prototype は、プロトタイプチェーンの最上位におかれます。
全ての JavaScript オブジェクト (Date, Array, RegExp, Function, ....) は、Object.prototype を継承します。
オブジェクト・プロトタイプを作成するための標準的な方法は、オブジェクトのコンストラクタ関数を使用することです:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
コンストラクタ関数を使用すると、同じプロトタイプから新しいオブジェクトを作成するために、 new キーワードを使用することができます:
var myFather = new Person("John", "Doe", 50, "blue");
var myMother = new Person("Sally", "Rally", 48, "green");
Try it Yourself »
コンストラクタ関数は、Person オブジェクトのプロトタイプです。
コンストラクタ関数名の最初の文字を大文字にするのは優れた慣習でお勧めします。
時に、既存のオブジェクトに新しいプロパティ(またはメソッド)を追加したい場合があります。
時に、指定したタイプの全ての既存オブジェクトに、新しいプロパティ(またはメソッド)を追加したい場合があります。
時に、オブジェクト・プロトタイプに新しいプロパティ(またはメソッド)を追加したい場合があります。
既存のオブジェクトに、新しいプロパティを追加するのは簡単です:
プロパティは、myFather に追加されます。myMother でも、他の person オブジェクトでもありません。
既存のオブジェクトに、新しいメソッドを追加するのも簡単です:
このメソッドは、myMother ではなく myFather に追加されます。
プロトタイプは、既存のオブジェクトではないので、既存のオブジェクトに新しいプロパティを追加するのと同じ方法で、 プロトタイプに新しいプロパティを追加することはできません。
コンストラクタに新しいプロパティを追加するには、そのプロパティをコンストラクタ関数に追加しなければなりません:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
Try it Yourself »
Prototype プロパティは、プロトタイプ値(デフォルト値)を持つことができます。
コンストラクタ関数は、メソッドを定義することもできます:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.name = function() {return this.firstName + " " + this.lastName;};
}
Try it Yourself »
JavaScript の prototype プロパティを使用すると、既存のプロトタイプに新しいプロパティを追加することができます:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";
Try it Yourself »
JavaScript の prototype プロパティは、既存のプロトタイプに新しいメソッドを追加することもできます:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.name = function() {
return this.firstName + " " + this.lastName;
};
Try it Yourself »
自分のプロトタイプだけを変更してください。標準の JavaScript オブジェクトのプロトタイプは、決して変更しないでください。