JavaScriptには現時点でclassという概念がない(JavaScript2.0から使える予定)。
■メンバ
インスタンスプロパティ
インスタンス化した後のオブジェクトのプロパティ。
function Person(name){ this.name = name; this.introduce = function(){ alert('My name is ' + this.name + '.'); }; } var john = new Person('John'); //an instance property is john.name
インスタンスメソッド
インスタンス化した後のオブジェクトのメソッド。
function Person(name){ this.name = name; this.introduce = function(){ alert('My name is ' + this.name + '.'); }; } var john = new Person('John'); //an instance property is john.introduce()
但し、以下のようにprototypeによってインスタンスメソッドを定義した場合、introduce()メソッドのnameにはthisが必須となる。
var undefined; function Person(name){ this.name = name; } Person.prototype.introduce = function(){ alert(this.name); } var john = new Person('John'); john.introduce();
クラスプロパティ
以下のようにすると、クラスプロパティが定義できる。インスタンス化されたオブジェクトからは当然アクセスできない。クラスプロパティは(クラス定数のように)慣例で全て大文字にする。
function Person(name){ this.name = name; this.introduce = function(){ alert('My name is ' + this.name + '.'); }; } Person.GENUS = 'genus Homo'; var john = new Person('John'); alert(john.GENUS);//none alert(Person.GENUS);//genus Homo
クラスメソッド
クラスメソッドには以下のようなものがある。PHPで言い換えるならばstaticをつけてクラスメソッドを宣言したような感じだ。自身で定義したクラスにメソッドを付加することも可能である。
alert(Date.parse('2009/09/23 17:30:37'));//1253694637000
■プライベートメンバ
JavaやPHPではアクセス修飾詞を使用してコントロールする機能。但し、以下のようにプロパティに保持しないというだけであり、グローバル空間からインスタンス化したオブジェクトを介してnameを表示させることはできる。メリットはnameを外から変更できない事だ。
function Person(name){ this.getName = function(){return name;}; } Person.prototype.introduce = function(){ alert(this.getName()); } var john = new Person('John'); alert(john.getName());//John john.introduce();//John