JavaScriptにおけるオブジェクト指向構文

JavaScriptにおけるオブジェクト指向

・JavaScriptでは、インスタンス化/インスタンスという概念はあるが、クラスが無く、プロトタイプ(雛形)という概念が存在するだけ
・JavaScriptでは、関数(Functionオブジェクト)に“クラス”(プロトタイプ)としての役割を与えている
・同一のプロトタイプをもとに生成されたインスタンスであっても、それぞれが持つメンバは同一であるとは限らない(→縛りの弱い“クラス”)

Functionオブジェクトによるプロトタイプ



var Member = function(firstName,lastName) {
 this.firstName = firstName;
 this.lastName = lastName;
 this.getName = function() {
  return this.lastName + ' ' + this.firstName;
 }
};

var mem = new Member('山田','太郎')
document.writeln(mem.getName());  //山田 太郎

動的にメソッドを追加する



var Member = function(firstName,lastName) {
 this.firstName = firstName;
 this.lastName = lastName;
};

var mem = new Member('山田','太郎')
mem.getName = function() {
 return this.lastName + ' ' + this.firstName;
}

document.writeln(mem.getName());  //山田 太郎

動的にメソッドを追加する場合の注意

動的に追加されたメソッドは、プロトタイプそのものではなく、生成されたインスタンスに対して追加されている

→同一のプロトタイプをもとに生成されたインスタンスであっても、それぞれが持つメンバは同一であるとは限らない



var Member = function(firstName,lastName) {
 this.firstName = firstName;
 this.lastName = lastName;
};

var mem = new Member('山田','太郎')
mem.getName = function() {
 return this.lastName + ' ' + this.firstName;
}

document.writeln(mem.getName());  //山田 太郎

var mem2 = new Member('鈴木','一郎')
document.writeln(mem2.getName());  //エラー:オブジェクトでサポートされていないメソッド