モジュールパターン(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ライブラリーがこの形式で書かれているのは、そういう理由によるものだろう。

個人的には、ページ内スクリプトをモジュールパターン、外部化したスクリプトクロージャーパタンで書くことがいいと思っている。このログで紹介しているコードの「書き方」も、この好みに合わせている。