Abstract調査
関連
prototype.jsの調査による課題の列挙。
http://d.hatena.ne.jp/tsugehara/20060719/1153275663
一つ前
http://d.hatena.ne.jp/tsugehara/20060726/1153926856
解説
var Abstract = new Object();
で、これは一度も使われていないわけだが、一体何をやっているんだこれは?
何か特殊なことをやっているのか?
という点がとても気になっていたのだが、実は「何もしていない」ようだ。
もう少し言うなら、ネームスペースとしてのみ機能している。
以下にAbstract以下のクラスを列挙する。
- Abstract.EventObserver
- Abstract.Insertion
- 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); } });
結論
- Abstractクラス自体の機能はなし
- Abstractクラスはネームスペースのように機能しており、Abstract以下のクラスは継承を前提に作成されている
言語にない継承を強引に再現してみました、ってところかな。