プロトタイプ継承(メモ)

JavaScriptオブジェクト指向がいまひとつよくわからないので。

まず、クラス定義のようなもの。

//クラス定義相当
function MyClass(x,y) {
    //フィールド相当
    this.x = x;
    this.y = y;
    //メソッド相当
    this.show = function() {
        print(this.x , this.y);
    }
}

//上のコンストラクタの呼び出し(インスタンス生成)
var obj = new MyClass(3,2);
obj.show();

これを実行すると

3 2

となります。

これと以下は、同じ結果をもたらします。これが「プロトタイプ継承」です。

//クラス定義相当
function MyClass(x,y) {
    this.x = x;
    this.y = y;
}
MyClass.prototype.show = function() {
    print(this.x , this.y);
}

//上のコンストラクタの呼び出し(インスタンス生成)
var obj = new MyClass(3,2);
//メソッド呼び出し
obj.show();

こちらの例の場合では、メソッド show はオブジェクト obj の直接のプロパティにはなっていませんが、メソッドの呼び出しができています。他のオブジェクト MyClass.prototype のプロパティを「継承」しているように見えるので、「プロトタイプ継承」の名前がついています。