惰性實例化要解決的問題是:避免了在頁面中 JavaScript 初始化執行的時候就實例化類,若是在頁面中沒有使用這個實例化的對象,就會形成必定的內存浪費和性能消耗。若是將一些類的實例化推遲到須要使用它的時候纔去作,就能夠避免資源過早損耗,作到 「按需供應」。html
// 惰性實列化代碼以下
var myNamespace = function(){ var Configure = function(){ var privateName = "tugenhua"; var privateGetName = function(){ return privateName; }; var privateSetName = function(name) { privateName = name; }; // 返回單列對象
return { setName: function(name) { privateSetName(name); }, getName: function(){ return privateGetName(); } } }; // 存儲Configure實列
var instance; return { init: function(){ // 若是不存在實列,就建立單列實列
if(!instance) { instance = Configure(); } // 建立Configure單列
for(var key in instance) { if(instance.hasOwnProperty(key)) { this[key] = instance[key]; } } this.init = null; return this; } } }(); // 調用方式
myNamespace.init(); var name = myNamespace.getName(); console.log(name); // tugenhua
如上代碼是惰性化實列代碼:它包括一個單體 Configure 實列,直接返回 init 函數,先判斷該單體是否被實列化,若是沒有被實列化的話,則建立並執行實列化並返回該實列化,若是已經實列化了,則返回現有實列;執行完後,則銷燬 init 方法,只初始化一次函數
參考:理解惰性實列化性能