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

19.メソッドの自動継承(1)

 この節では、スーパークラスにて定義されたメソッドを「自動的に」継承する方法について検討します。
 そもそもメソッドを継承するとはどういうことであるかを考えてみます。メソッドはクラス(コンストラクタ)のprototypeプロパティに設定されているわけですから、この内容をすべてサブクラスのprototypeにコピーすれば、メソッドの継承ができたことになります。
 prototypeプロパティのコピーを行う方法としては、もっとも素朴な方法として、以下のようにprototypeプロパティを直接コピーする方法を思いつくことでしょう。

    ColoredPoint.prototype = Point.prototype;

 実はこの方法はうまくいきません。その理由は二つあります。
 まず、NetscapeNavigatorでは、prototypeプロパティはRead Onlyであり、内容を置き換えることができません(実行エラーになる)。一方IEではこの分は実行可能です。
 しかし、IEの場合でも、この式は意図したようには動作しません。上記を実行すると、PointクラスとColoredPointは同一のメソッド群を持つことになります。従って、サブクラス(ColoredPoint)側でメソッドを追加したり、既存メソッドを置き換え(オーバーロード)ると、これらはスーパークラス(Point)にも反映されてしまいます。これは「継承」とは言えません。
 それではどうすれば自動継承ができるか。これについては次節で検討します。

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

目次