アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 特集 » prototype.jsを読み解く » 第10回 Prototypeライブラリ(2846~3276行目)

prototype.jsを読み解く

第10回 Prototypeライブラリ(2846~3276行目)

最終回

この連載も今回が最終回です。

単に季節物のPrototypeライブラリを解説する,という視点ではなく,今後ライブラリのバージョンがさらにあがっても応用できるような基礎知識や,深追いするためのヒントなどを織り交ぜてきたつもりです。

「あとで読む」つもりの方も多いかと思いますが,読むのを忘れないでもらえれば幸いです。:-))

では,最後まで一気に行きましょう。

Abstract.TimedObserver オブジェクト

2846: Abstract.TimedObserver = function() {}
2847: Abstract.TimedObserver.prototype = {
2848:   initialize: function(element, frequency, callback) {
2849:     this.frequency = frequency;
2850:     this.element   = $(element);
2851:     this.callback  = callback;
2852: 
2853:     this.lastValue = this.getValue();
2854:     this.registerCallback();
2855:   },
2856: 

2846行目からはAbstract.TimedObserverです。

Form.Element.Observer,Form.Observerのprototypeとして使われます。ベースクラスとして使われるだけなので,このオブジェクト自体はClass.create()されずに単なるオブジェクト({})として初期化されています。

よって,2848行目からのinitialize()メソッドはForm.Element.Observer, Form.ObserverオブジェクトがClass.create()で初期化されることで,共通して利用されるコンストラクタとなります。

コンストラクタの中身は,まずインスタンス変数に引数を格納し,各派生クラスで定義されている getValue() を呼んで現状の値を保存しています。渡されたパラメータに基づいて registerCallback()メソッドを呼び出して,その中で定期的なタイマーをsetInterval()で設定しています。

2857:   registerCallback: function() {
2858:     setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
2859:   },
2860: 

そのregisterCallback()です。前述したように,単にsetInterval()を呼んでいるだけです。特に特徴的な所も無く,this.メソッド名.bind(this)の慣用句を使っているくらいです。

2861:   onTimerEvent: function() {
2862:     var value = this.getValue();
2863:     var changed = ('string' == typeof this.lastValue && 'string' == typeof value
2864:       ? this.lastValue != value : String(this.lastValue) != String(value));
2865:     if (changed) {
2866:       this.callback(this.element, value);
2867:       this.lastValue = value;
2868:     }
2869:   }
2870: }
2871: 

2861行目からはタイマーイベントごとに呼ばれるonTimerEvent()メソッドです。

まずgetValue()で最新の値を取得します。Form.Element.Observerの場合はgetValue()がnullを返す可能性があるので,それも考慮してlastValueから変化があったかどうかをchangedに入れます。

あとは変化した場合にコンストラクタから渡されたコールバック関数を呼び,次のためにlastValueを上書きして終了です。

Form.Element.Observer クラス

2872: Form.Element.Observer = Class.create();
2873: Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
2874:   getValue: function() {
2875:     return Form.Element.getValue(this.element);
2876:   }
2877: });
2878: 

2872行目からはForm.Element.Observerクラスです。

フォームの入力要素を定期的に監視し,変化があった場合にコールバック関数を呼び出します。

実装はClass.create()で雛形を生成し,prototypeに先ほどのAbstract.TimedObserver.prototypeとこのクラス固有のgetValue()メソッドをマージしたものを代入します。

getValue()メソッドでは,Form.Element.getValue()を使って入力要素の値を取得しています。

Form.Observer クラス

2879: Form.Observer = Class.create();
2880: Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
2881:   getValue: function() {
2882:     return Form.serialize(this.element);
2883:   }
2884: });
2885: 
2886: /*--------------------------------------------------------------------------*/
2887: 

2879行目からはForm.Observerクラスです。こちらはフォーム全体を監視します。

Form.Element.Observerと同様にAbstract.TimedObserverから継承し,getValue()には Form.serialize()を使ってフォーム全体の値を文字列として取得しています。

著者プロフィール

栗山淳(くりやまじゅん)

S2ファクトリー株式会社株式会社イメージソース所属。
本業はWeb制作会社の裏方。得意分野はFreeBSDやPerlのはずだが,必要に迫られるとHTML/CSSやJavaScriptも書く。

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス