Func09 JavaScript、クロージャをおさらいしてみる

トグル処理の様々な実装方法テスト in JavaScript

@author Mitsuru Haga<haga@a-oi.jp>
@version 2007/03/16 3:40

はじめに

○○さんの「業務日報2007/03/15」のJavaScriptを拝見していて、JavaScript大好きっことしてはムラムラきたので僕もトグル処理を書いてみます。最近プログラミングしていないので、ストレスが・・。

○○さんのトグル処理は、プログラミングニュービーとは思えない、シンプルで的確なソースでした。そこをあえて改良するとなると・・・

などに焦点をあてつつ、JavaScriptならではのダイナミックかつトリッキーな方法で実装します。


実装方法

  1. オブジェクト拡張方式

    JavaScriptといえば、オブジェクト。
    トグル動作をするためのクラスを作り、ボタン要素に対して擬似的に継承します。
    そうすることで、まさにトグるために生成されたトグルボタンができる。

  2. クロージャ渡し方式

    JavaScriptといえば、クロージャ。
    1つの関数で複数要素へのローカル変数を定義・保持するために、クロージャとレキシカルスコープを利用する。
    そうすることで、イベントに関数を定義しながら、内部でフラグを保持することができるようになる。


それ何がいいの?


サンプル

さっそくサンプルを・・
ボタンを押すと「ON」「OFF」切り替わります。

オブジェクト拡張式

OFF



OFF

クロージャ渡し方式
OFF


OFF

ソースコード

[ソースコードを表示する]


さらに追求するなら・・

結果を表示する処理自体を、ロジックから分離できます。
こんな感じで、コールバック関数を引数で渡してレキシカルスコープ内に保持。Function.apply()で呼び出す。[ソースコードを表示する]


と書いているうちに・・・

実際に実装してみちゃいました。このページの「ソースコード」の開閉処理(→)がそうです。まさにトグるためのUI。[ソースコードを表示する]
トグル処理と表示処理が分離しました。


終わりに

いきおいで作りはじめてしまいましたが、久々にソースコードを書いて楽しかったです。
ここ数年でJavaScriptは勉強する人が一気に増えておもしろくなってきました。
クラス定義もできない言語なんて・・と思っていたけれど、JavaScriptでオブジェクト指向してみると、実は他の言語にはないおもしろさがたくさんあります。
弊社もせっかく人が増えてきたのだから、たまに勉強会とかできるといいんですけどねぇ・・。

では・・enjoy your work!