自作コンパイラの部屋 > オブジェクト指向プログラム言語としてのJavaScript > 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); 実行結果:
![]() |
目次 |