モジュールパターン(module pattern)とクロージャーパターン(closure pattern)
Javascriptの記述方法としては、functionを書き連ねて、必要に応じて呼び出すことが多いんじゃないかと思う。だが、それだと雑然としたコードになって、「とりあえず書いてみました」的な印象となってしまう。
このログでもしばしば取り上げてきたが、YUI Blogにモジュール・パターン(module pattern)という書き方が紹介されている。具体的には、以下のようなコードになる。
ObjectName = function() { var private_variable1; var private_function1 = function(){ } return{ public_variable1: public_function1: function() { } } }();
この場合、
ObjectName.public_variable1; ObjectName.public_function1;
という呼び出しは可能だが、private_variable1、private_function1には(外部から)はアクセスできない(ただし、private_function1, public_function1からprivate_variable1、private_function同士のアクセスはできる)。
この記述方式のよいところは、変数や関数のスコープが、視覚的に分かりやすいこと。
また、これと同様のことが、クロージャー形式(クロージャー・パターン:closure pattern)でも書くことができる。多くのJavascriptライブラリーが、この形式で書かれている。上の書式を書き直すと、
var ObjectName = function() { var private_variable1; var private_function1 = function(){ } this.public_variable1; this.public_function1 = function(){ } return this; };
となる。この場合にも、
var _obj = new ObjectName; _obj.public_variable1; _obj.public_function1;
という呼び出し可能だが、private_variable1、private_function1には(外部から)はアクセスできない(ただし、private_function1, public_function1からprivate_variable1、private_function同士のアクセスはできる)。
この方法のよいところは、「オブジェクト指向プログラミング」っぽい形式でObjectNameが利用できること。多くのJavascriptライブラリーがこの形式で書かれているのは、そういう理由によるものだろう。
個人的には、ページ内スクリプトをモジュールパターン、外部化したスクリプトをクロージャーパタンで書くことがいいと思っている。このログで紹介しているコードの「書き方」も、この好みに合わせている。