bata's log

フロントエンド系のTipsとかメモ

デザインパターン:The Module Pattern

即時関数を使ってプライベートなスコープを実現するモジュールパターン。

var Sample = (function(){

    var _name = 'Ryo Kawabata';
    var _age = 37;

    function _sayHello(){
        console.log('Hello, my name is ' + _name);
    }

    return{
        sayHello: _sayHello
    };

})();

Sample.sayHello();

即時関数を使用してラッピングし外部から変数や関数にアクセスさせない。
return{}で返された部分のみ外からアクセス可能。

別の書き方(2014年6月27日追記)

var Sample = Sample || {};

Sample.util = (function (){
    var _util = {};

    _util.name = 'Ryo Kawabata';
    _util.age = 37;

    _util.sayHello= function() {
        console.log('Hello,' + _util.name + 'です');
    };
    return _util;
})();

Sample.util.sayHello();
console.log(Sample.util.age);

スコープ内でローカル変数にオブジェクトを定義してそこにプロパティとかメソッドを追加するパターン。
_utilに追加したメソッドSample.utilに追加された事になるというのがわかりにくいというかなんというか… 前のパターンに比べると大規模向き?