一、定義
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
當單擊登陸按鈕,頁面中出現一個登陸浮窗,這個登陸浮窗是唯一的,無論單擊多少次登陸按鈕,這個浮窗都只會被創建一次,那麼這個登陸浮窗就適合用單例模式來創建。
二、實現原理
要實現單例並不復雜,使用一個變量來標志當前是否已經為某個類創建過對象,如果是,則在下一次獲取該類的實例時,直接返回之前創建的對象。
三、假單例
全局變量不是單例模式,但在JavaScript開發中,我們經常會把全局變量當成單例來使用。
var a = {};
降低全局變量帶來的命名污染
(1)使用命名空間
var namespace1 = { a: function(){}, b: 2 }
(2)使用閉包封裝私有變量
var user = (function() { var _name = 'lee', _age = '25'; return { getUserInfo: function() { return _name + ":" + _age; } }; })();
四、惰性單例:在需要的時候才能創建對象實例
var getSingle = function(fn) { var result; return function() { return result || (result = fn.apply(this, arguments)); }; }; // 測試 function testSingle(){} getSingle(testSingle)() === getSingle(testSingle)(); // true
五、補充:
(1)懶加載
var lazyload = function() { console.log(1); lazyload = function() { console.log(2); } return lazyload(); } lazyload();
(2)預加載
var preload = (function() { console.log(1); preload = function() { console.log(2); }; return preload; })(); preload();
希望本文所述對大家學習javascript程序設計有所幫助。