Abstract調査

解説

var Abstract = new Object();

で、これは一度も使われていないわけだが、一体何をやっているんだこれは?
何か特殊なことをやっているのか?
という点がとても気になっていたのだが、実は「何もしていない」ようだ。
もう少し言うなら、ネームスペースとしてのみ機能している。


以下にAbstract以下のクラスを列挙する。

  1. Abstract.EventObserver
  2. Abstract.Insertion
  3. Abstract.TimedObserver

これらは全てこのまま使うタイプのものではなく、下表のような継承を用いて使用するようだ。

基底クラス 派生クラス
Abstract.TimedObserver Form.Element.Observer
Form.Observer
Abstract.Insertion Insertion.Before
Insertion.Top
Insertion.Bottom
Insertion.After
Abstract.EventObserver Form.Element.EventObserver
Form.EventObserver

継承して使うためのテンプレートといった位置付けだろう。こういった継承前提のクラス群をAbstractに突っ込んでいるようだ。
たとえばAbstract.EventObserverはgetValue関数が定義されていないため、newは出来るがそのままでは使えないクラスである。これをObject.extendでForm.Element.EventObserverが継承し、かつgetValue関数を定義してやると、Form.Element.EventObserverはわずかこれだけのコードで強力な機能を持つことになる。

Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

結論

  1. Abstractクラス自体の機能はなし
  2. Abstractクラスはネームスペースのように機能しており、Abstract以下のクラスは継承を前提に作成されている

言語にない継承を強引に再現してみました、ってところかな。