JavaScriptおれおれAdvent Calendar 2014 – 03日目
立て込んでて日付またいじゃいました。
そんなに大きくない規模のJSを書く際、こういうパターンで作る場合が多い。
(function() { var controller = { start: function() { // … }, // … }; $(function() { controller.start(); }); })();
全体を即時実行関数で括る
スコープ生成してグローバル変数にならないように。
一昨日の記事参照。
controller
オブジェクト
オブジェクトリテラルで。
前項の通りスコープ生成されているから、その中で普通に関数作ったり共通の変数を使ったりしても別に構わないんだけど。でも普段はBackbone.JS的な書き方をしている事が多いので、やはりオブジェクトにまとめる書き方の方が慣れている感じがする。
コンストラクターにはしない。ひとつしか存在しないから、わざわざnew
する手間はいらないんじゃないかな。
controller
という名前
今、この名前に決めました。全体的な処理を「コントロール」するオブジェクトなんで、この名前で良いのではないかな。今後はこの名前にしよう。
他に諸々の処理単位があれば、それぞれオブジェクトを生成します。こちらはだいたいコンストラクターにする事が多い気がする。その場合、controller
から各オブジェクトのインスタンスを作成し、関連付けしたり起動したりします。
各コンストラクターはModelとViewみたいな扱いにする場合が多いんだけど、それはまた別の機会に書きたいと思います。
関連:
start
メソッド
いわゆるエントリーポイント。
うーん、使ってるのは”initialize”という名前にする事の方が多いかなあ。今後は”start”で統一したい所存。そっちの方がそれっぽい気がする。
エントリーポイントって
最初に実行される処理の事です。C言語だと「main関数」がそれ。
JavaScriptの場合は単純に上から順に実行されるので、「ここから始める!」という認識が薄い気がする。
なんでわざわざ用意するかっていうと
その方が見やすいと思うので。「最初の処理」があちこちに散らばってたら嫌でしょう?
$(fn)
jQueryを使ってる場合はこれ。
でも実際、自分で全部作ってる場合はこれも省略する事が多いなあ。JSファイル読み込みを必ずHTML末尾にするって決めれば、だいたいDOMContentLoadedを待つ必要ない。
そんな感じ
なんか普段使ってる、みたいに言っておいて普段とはちょっと違ってそうだ(笑)。
でもまあ、だいたいこんな方針です。