@blog.justoneplanet.info

日々勉強

JavaScript Class Basic(クラスの基本)

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

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment