自作コンパイラの部屋 > オブジェクト指向プログラム言語としてのJavaScript > 20.メソッドの自動継承(2)

20.メソッドの自動継承(2)

 前節では、メソッドの自動継承の手法としてprototypeプロパティをそのままコピーする方法を検討しましたが、これではうまくいかないことを確認しました。
 次なる方法は、スーパークラスのprototypeプロパティの内容を、一項目ずつサブクラスのprototypeにコピー(代入)するという方法です。
 この方法の実現にはJavaScriptのfor/inを使用するのが便利です(下記)。

    for (var prop in Point.prototype) {
        ColoredPoint.prototype[prop] = Point.prototype[prop];
    }
 上記プログラム断片は非常に一般的な内容なので、汎用部品として関数にした方が良いでしょう。
    function inherit(subClass, superClass) {
        for (var prop in superClass.prototype) {
            subClass.prototype[prop] = superClass.prototype[prop];
        }
    }
 これにより、ColoredPointクラスを実現した例を以下に示します。
    function ColoredPoint(x, y, color) {   // ColoredPointのコンストラクタ
        this.x = x;
        this.y = y;
        this.color = color;    
    }
    new ColoredPoint(0, 0, "");   // ダミー
    inherit(ColoredPoint, Point);           // Colorクラスの自動継承

    // toStringメソッドの定義
    function ColoredPoint_toString() {   // まず関数として定義して
        return "ColoredPoint(" + this.x + ", " + this.y + ", " + this.color + ")";
    }
    // メソッドの設定
    ColoredPoint.prototype.toString = ColoredPoint_toString;
    // 使用例
    var cp = new ColoredPoint(10, 30, "red");
    document.writeln("cp = ", cp);
    cp.moveTo(20, 40);
    document.writeln("cp = ", cp);

実行結果:

21.try...catchによる例外処理

目次