○○さんの「業務日報2007/03/15」のJavaScriptを拝見していて、JavaScript大好きっことしてはムラムラきたので僕もトグル処理を書いてみます。最近プログラミングしていないので、ストレスが・・。
○○さんのトグル処理は、プログラミングニュービーとは思えない、シンプルで的確なソースでした。そこをあえて改良するとなると・・・
管理するフラグが増える事も考えて、グローバル変数は極力使わない方向で。
2つ以上のボタンで処理したい場合は、関数をもうひとつ用意しなきゃならないので、1つで全部まかなえるように
document.getElementById()は、DOM内を全検索するため結構負荷が高い、一回呼んだら参照を保持する方向で。
出力からは、極力ロジックを抜いたほうがいいので、その方向で。
などに焦点をあてつつ、JavaScriptならではのダイナミックかつトリッキーな方法で実装します。
JavaScriptといえば、オブジェクト。
トグル動作をするためのクラスを作り、ボタン要素に対して擬似的に継承します。
そうすることで、まさにトグるために生成されたトグルボタンができる。
JavaScriptといえば、クロージャ。
1つの関数で複数要素へのローカル変数を定義・保持するために、クロージャとレキシカルスコープを利用する。
そうすることで、イベントに関数を定義しながら、内部でフラグを保持することができるようになる。
さっそくサンプルを・・
ボタンを押すと「ON」「OFF」切り替わります。
結果を表示する処理自体を、ロジックから分離できます。
こんな感じで、コールバック関数を引数で渡してレキシカルスコープ内に保持。Function.apply()で呼び出す。[ソースコードを表示する]
実際に実装してみちゃいました。このページの「ソースコード」の開閉処理(→)がそうです。まさにトグるためのUI。[ソースコードを表示する]
トグル処理と表示処理が分離しました。
いきおいで作りはじめてしまいましたが、久々にソースコードを書いて楽しかったです。
ここ数年でJavaScriptは勉強する人が一気に増えておもしろくなってきました。
クラス定義もできない言語なんて・・と思っていたけれど、JavaScriptでオブジェクト指向してみると、実は他の言語にはないおもしろさがたくさんあります。
弊社もせっかく人が増えてきたのだから、たまに勉強会とかできるといいんですけどねぇ・・。
では・・enjoy your work!