javascript模块化开发初探

//immediately-invoked fuction expression   iife
;(function(arg){
    return something;
})(arg);
//第二种写法 
!function(arg){

}(arg);

//第三种写法
(function(arg){

}(arg));
 
//eg 可访问ModuleProperty moduleMethod
    var Module = (function(){
        var my = {},
            privateVariable = 1;
        function privateMethod(){

        }
        my.ModuleProperty = 1;
        my.moduleMethod = function(){

        };
        return my;
    }());

//eg2
    var Module = (function(){
        var my = {},
            privateVariable = 1;
        function privateMethod(){

        }
        my = {
            ModuleProperty : 1;
            moduleMethod : function(){

            }
        }
        return my;
    }());

    //使用对象直接量来表达
    var my = {
            ModuleProperty : 1;
            moduleMethod : function(){

            }
        };
    //返回一个函数 如jquery
    var Cat = (function(){
        //    私有成员
        return function(name){
            this.name = name;
            this.bark = function(){};
        }
    }());
    var tomcat = new Cat("tom");
    tomcat.bark();
//
    var module =(function(){
        var x = 1;
        function f1(){}
        function f2(){}
        return {
            publicmethod : f1,
            publicmethod : f2
        }

    }());

    //扩展
    var Module = (function(my){
        my.anothermothod = function(){

        };
        return my;
    }(Module));

    //松耦合扩展  如果没有定义过Module 或者不在乎加载顺序的话
     var Module = (function(my){
         my.anothermothod = function(){

        };
        return my;
     }( Module || {} ));

     //紧耦合扩展   定义过,并且在以前的基础上扩展 覆盖已有方法
      var Module = (function(my){
          var oldmothod = my.modulemethod;
          my.modulemethod = function(){
              //方法重载
          };
        return my;
     }( Module ));

     //克隆与继承     a
     var module_two = (function(old){
         //
         var my = {},
             key;
         for( key in old ){
             if(old.hasOwnPropery(key)){
                 my[key] = old[key]
             }
         }
         
         var supermethod = old.modulemethod;
         my.modulemethod = function(){
             //重写
             //supermethod
         };
     }(Module));
     // b   Create(old);
     var module_two = (function(old){
         
         var my = Create(old);

         var supermethod = old.modulemethod;
         my.modulemethod = function(){
             //重写
             //supermethod
         };
     }(Module));
原文地址:https://www.cnblogs.com/jine/p/4079654.html