JavaScript模块模式:首选哪种表示法?

时间:2013-12-28 21:06:27

标签: javascript design-patterns

最近,我开始学习常见的JavaScript模式,并对模块模式提出疑问。

哪种符号(以及为什么)更方便和首选?

“分开”表示法:

var SeparatedApproachModule = (function() {
    var _private = { };
    var _public  = { };
    _private.doABarrelRoll = function() {
        //Do a barrel roll here
    }
    _public.buttonDoABarrelRoll_Click = function() {
        alert("I am doing a barrel roll!");
        _private.doABarrelRoll();
    }
    return _public;
})();

“聚合”表示法:

var AggregatedApproachModule = (function() {
    var _private = {
        doABarrelRoll: function() {
            //Do a barrel roll here
        }
    };
    var _public = {
        buttonDoABarrelRoll_Click: function() {
            alert("I am doing a barrel roll!");
            _private.doABarrelRoll();
        }
    };
    return _public;
})();

同时发布您使用的其他常见或个人方法及其优势。

1 个答案:

答案 0 :(得分:2)

就个人而言,最简单的是阅读,以后要记得越好。我没有返回对象,而是将对象暴露给全局范围:

(function(AsGlobal/*or you can name it Public*/){

// private
var ModuleHelper  = {
  log : function(message){/*do stuff*/}

}

// Public
AsGlobal.Module = {

   save:function(userName){
      //saving code
      ModuleHelper.log('the user '+ userName +' saved the proyected');
   }

}


})(window);// the object that expose my objects to global scope