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()); //エラー:オブジェクトでサポートされていないメソッド