學習JavaScript設計模式之單例模式_javascript技巧

來源:互聯網
上載者:User

一、定義

保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。
當單擊登陸按鈕,頁面中出現一個登陸浮窗,這個登陸浮窗是唯一的,無論單擊多少次登陸按鈕,這個浮窗都只會被建立一次,那麼這個登陸浮窗就適合用單例模式來建立。

二、實現原理

要實現單例並不複雜,使用一個變數來標誌當前是否已經為某個類建立過對象,如果是,則在下一次擷取該類的執行個體時,直接返回之前建立的對象。

三、假單例

全域變數不是單例模式,但在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程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.