1. 程式人生 > >javascript面向物件程式設計--惰性例項化(實現按需例項化)

javascript面向物件程式設計--惰性例項化(實現按需例項化)

javascript是以物件為基礎,以函式為模型,以原型為繼承機制的開發模式

惰性例項化:避免在頁面中使用javascript初始化執行時就例項化類,而是將一些類的例項化推遲到需要時候才去例項化,避免資源過早的消耗

var myNamespace=function(){

   var Configure=function(){

        var privateName="someone's name";

        var privateReturnName=function(){ return privateName;}

        var privateSetName=function(name){ privateName=name;}

      return {//返回單例物件

         setName:function(name){privateName(name);},

         getName:function(){return privateReturnName();}

     }

    }

 var instance;//儲存configure例項

return{

  getInstance:function(){

      if(!instance){instance=Configure();}

     return instance;

    }

 }

}();

myNamespace.getInstance().getName(); //使用時需要getInstance()這個函式作為中間量

//2.不使用中間量的程式碼,是在上面程式碼稍作修改

var myNamespace2=function(){

   var Configure=function(){

        var privateName="someone's name";

        var privateReturnName=function(){ return privateName;}

        var privateSetName=function(name){ privateName=name;}

      return {//返回單例物件

         setName:function(name){privateName(name);},

         getName:function(){return privateReturnName();}

     }

    }

 var instance;//儲存configure例項

return{

       init:function(){

             if(!instance){instance=Configure();} //如果不存在例項,就建立單例例項

           for(var key in instance){//建立Configure例項

               if(instance.hasOwnProperty(key)){ this[key]=instance[key];}//將該物件的方法賦給myNamespace2

          }

        }

      this.init=null;

      return this;

    }

 }

}();

//使用方式

myNamespace2.init();

myNamespace2.getName();