JS-單體模式

介紹

單體模式是JavaScript中比較簡單的且常用的模式。單體模式思想在於保證一個特定類僅有一個實例,意味着當你第二次使用同一個類創建信對象時,應得到和第一次創建對象完全相同。

優點

1.可以用來劃分命名空間,減少全局變量的數量

2.可以被實例化,且實例化一次

實現

老規矩舉個栗子來解釋一下:頁面需要一個彈窗來展示接口返回的錯誤信息

// 實現彈窗
var createWindow = function(){
    var div = document.createElement("div");
    div.innerHTML = "返回錯誤信息";
    div.style.display = 'none';
    document.body.appendChild('div');
    return div;
};
document.getElementById("Id").onclick = function(){
    // 點擊後先創建一個div元素
    var win = createWindow();
    win.style.display = "block";
}

缺點很明顯,當有很多接口短時間內返回錯誤信息的時候,會頻繁的創建元素,從而引起重繪影響性能。那如果使用單體模式呢

// 創建div
var createWindow = function(){
    var div = document.createElement("div");
    div.innerHTML = "我是彈窗內容";
    div.style.display = 'none';
    document.body.appendChild(div);
    return div;
};
// 創建iframe
var createIframe = function(){
    var iframe = document.createElement("iframe");
    document.body.appendChild(iframe);
    return iframe;
};
// 獲取實例的封裝代碼
var getInstance = function(fn) {
    var result;
    return function(){
        return result || (result = fn.call(this,arguments));
    }
};
// 測試創建div
var createSingleDiv = getInstance(createWindow);
document.getElementById("Id").onclick = function(){
    var win = createSingleDiv();
    win.style.display = "block";
};
// 測試創建iframe
var createSingleIframe = getInstance(createIframe);
document.getElementById("Id").onclick = function(){
    var win = createSingleIframe();
    win.src = "http://cnblogs.com";
};

通過getInstance來實例化傳入的fn函數,不需要管他是創建什麼元素,只需要保證fn只實例化一次就可以

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章