DOMに挑戦、そして挫折も

 遅まきながらJavaScriptに挑戦して、けっこういいじゃないかという感触を得たというお話をしました。で、そのJavaScriptですが、最近はやりのAjaxなんかがそうなのですが、DOM、Document Object Modelを利用することによって、動的にページを書き換えたりすることができるんです。ページの再読み込みをしなくても表示を変更できるし、過去のJavaScriptではせいぜいブラウザのステータスバーやフォームのテキストボックスあたりに文字を流すのが関の山でしたが、DOMを使うとリストを動的に書き換えたりもテーブルを動的に書き換えたりも可能で、表現できる範囲がケタ違いなのです。

 けど、私は正直DOMに手を出すことはないと思っていました。なにより今から物事を覚えるのは大変だし、DOMというのをどう扱っていいかもわからないし。でも、人間なにがきっかけになるかわかりませんね。以前もいっていたゲーム内の授業の時間割を表示するスクリプトを動的に表示変更するものに書き換えようという思いが急に沸き立って、コードを書き直してみたのですよ。書いてみてわかったのですが、DOMはそんなに難しく考えるようなものではないのですね。やってみればわかるのですが、結構便利で、わかりやすくできています。document.write()でやみくもにタグやらなんやらを書くよりもずっとスマートに表現できるということもわかって、今後もしまたJavaScriptでなにかやるならDOMを使うなあという感触がひしひしとしています。

 でも、DOMなんですが、やっぱりInternet ExplorerとMozilla系では違いがあって、Mozilla系は仕様に忠実なのかな、対してIEはまだ少し不備があるようで、このへんは現在開発中のIE 7に期待すべきなのかも知れません。とにかく、IE 6はもはやレガシーといっていいブラウザかも知れないと思います。

失望ちょっと

 JavaScriptについて、少し失望するところもありました。それはなにかというと、再帰呼び出しの機能なんです。

 動的時間割表示スクリプトでは、テーブルや時分秒、授業アナウンスの各オブジェクトを置き換える必要があるので、プログラムをループさせています。その際に関数の再帰呼び出しをしているのですが、どうもこれがうまくないんですね。

 なにがうまくないというと引数の扱いです。私は最初テーブルの描画をおこなう関数に引数としてクラスインスタンスを渡して、それでもってテーブルオブジェクトを作成させるつもりだったんです。つまり、関数に引き渡す前にさまざまな設定、つまりプロパティへの値をセットしたりどうこうしたりは済ませておいて、そのインスタンスをテーブル描画関数に渡して、あとはその関数が再帰呼び出しされるようにと考えていたら、一度目の呼び出しはよいとして、再帰呼び出しではなぜかインスタンスがうまく渡せないんです。nullからはオブジェクトを生成できないみたいにいわれまして、とにかくうまくいかなくて、いろいろ調べたりもしたのですが、そして引数を渡す方法はあるようなのですが、私にはどうしても解を見つけることができませんでした。

 だからここで考え方をちょっと変えて、テーブルを扱うクラスに描画するメソッドをつけて、そいつを再帰呼び出ししたらよいかもって思ったんです。これだとプロパティはもう設定されているわけですから、引数を与えなくても大丈夫じゃないですか。と思ってやってみたら、やっぱり一回目はいいのですが、再帰呼び出ししたときにクラスインスタンスが消滅しているようで、値をとれないんですね。で、エラーが出る。

 なので、再帰呼び出しされる関数の内部でそのつどインスタンスを作成するという手段をとることにしました。けどこのやり方だとオブジェクト指向を使うメリットってあんまりないですよね。

 とまあこんな感じで挫折して失望して、けれどもっと技術や知識、理解があったらこうした問題も乗り越えられたかも知れなくて、このへんはきちんと取り組んでこなかったスタンスが悪く反映しています。でもまあいいや。少しずつわかっていけばいいんだし。JavaScriptに関してはのんびりつきあっていこうと思います。


わたしの愛した機械へ トップページに戻る

公開日:2006.05.12
最終更新日:2006.05.12
webmaster@kototone.jp
Creative Commons License
こととねは、クリエイティブ・コモンズ・ライセンス(表示 - 継承 2.1 日本)の下でライセンスされています。