亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript實現單例模式實例分享

2019-11-19 14:40:13
字體:
來源:轉載
供稿:網友

傳統單例模式

保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

實現單例核心思想

無非是用一個變量來標志當前是否已經為某個類創建過對象,如果是,則在下一次獲取該類的實例時,直接返回之前創建的對象,接下來我們用JavaScript來強行實現這個思路,請看代碼:

var Singleton = function( name ){  this.name = name;};Singleton.prototype.getName = function(){   alert ( this.name );};Singleton.getInstance = (function(){   var instance = null;  return function( name ){          if ( !instance ){            instance = new Singleton( name );          }        return instance;       }})();

我們通過Singleton.getInstance來獲取Singleton類的唯一對象,這樣確實是沒問題的,但是js本身是沒有類這種概念的,所以我們強行用傳統單例思想來實現是沒有任何意義的,這樣的代碼又臭又長(其實是我自己看著不舒服嘻嘻嘻)。下面我們使用JavaScript的閉包來實現一個單例,請看代碼:

var CreateDiv = (function(){       var instance;      var CreateDiv = function( html ){           if ( instance ){            return instance;           }          this.html = html; this.init();          return instance = this;};CreateDiv.prototype.init = function(){var div = document.createElement( 'div' );div.innerHTML = this.html; document.body.appendChild( div );      };      return CreateDiv; })();var a = new CreateDiv( 'sven1' ); var b = new CreateDiv( 'sven2' );alert ( a === b ); // true

可以看到,這樣我們確實用閉包來實現了一個單例,但這個代碼還是高度耦合的,CreateDiv的構造函數實際上負責了兩件事情。第一是創建對象和執行初始化init方法,第二是保證只有一個對象。這樣的代碼是職責不明確的,現在我們要把這兩個工作分開,構造函數就負責構建對象,至于判斷是返回現有對象還是構造新的對象并返回,我們交給另外一個函數去完成,其實也就是為了滿足一個編程思想:單一職責原則。這樣的代碼才能更好的解耦,請看下面代碼:

var CreateDiv = function (html) {    this.html = html;    this.init();  };  CreateDiv.prototype.init = function () {    var div = document.createElement('div');    div.innerHTML = this.html;    document.body.appendChild(div);  };  var ProxySingletonCreateDiv = (function () {    var instance;    return function (html) {      if (!instance) {        instance = new CreateDiv(html);      }      return instance;    }  })();  var a = new ProxySingletonCreateDiv('sven1');  var b = new ProxySingletonCreateDiv('sven2');  alert(a === b); //true

可以看到,現在我們的構造函數CreateDiv現在只負責構造對象,至于是返回現有對象還是構造新的對象并返回,這件事我們交給了代理類proxySingletonCreateDiv來處理,這樣的代碼看著才舒(zhuang)服(bi)嘛!

最后貼一個高度抽象的單例模式代碼,惰性單例的精髓!

//單例模式抽象,分離創建對象的函數和判斷對象是否已經創建  var getSingle = function (fn) {    var result;    return function () {      return result || ( result = fn.apply(this, arguments) );    }  };

形參fn是我們的構造函數,我們只要傳入任何自己需要的構造函數,就能生成一個新的惰性單例。比如說傳入創建一個女朋友的構造函數,并且調用getSingle(),就能生成一個新的女朋友。如果以后再調getSingle(),也只會返回剛才創建的那個女朋友。至于新女朋友――不存在的。

單例常用場景

只需要生成一個唯一對象的時候,比如說頁面登錄框,只可能有一個登錄框,那么你就可以用單例的思想去實現他,當然你不用單例的思想實現也行,那帶來的結果可能就是你每次要顯示登陸框的時候都要重新生成一個登陸框并顯示(耗費性能),或者是不小心顯示出了兩個登錄框。

以上就是我們給大家分享的關于JS實現單例模式的相關學習的心得,感謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
超碰日本道色综合久久综合| 精品亚洲一区二区三区四区五区| 亚洲一区第一页| 国产精品h在线观看| 欧美精品在线播放| 欧美成人在线影院| 亚洲一区二区国产| 亚洲片国产一区一级在线观看| 一区二区三区回区在观看免费视频| 午夜精品www| 亚洲影院在线看| 日韩欧美亚洲成人| 亚洲男人天堂久| 亚洲xxxx3d| 亚洲性猛交xxxxwww| 欧美成人免费视频| 欧美精品免费播放| 欧美日韩在线视频一区| 国产精品户外野外| 永久555www成人免费| 欧美激情视频一区二区三区不卡| 亚洲美女av电影| 一本一本久久a久久精品综合小说| 91国自产精品中文字幕亚洲| 亚洲韩国青草视频| 51午夜精品视频| 91在线视频成人| 宅男66日本亚洲欧美视频| 日韩一区二区三区在线播放| 日韩电影中文字幕| 久久亚洲国产成人| 日本在线精品视频| 国产精品第1页| 成人免费午夜电影| 精品国偷自产在线视频| 欧美精品在线极品| 久久精品影视伊人网| 国产精品高清在线| xxxxx成人.com| 国产精品视频最多的网站| 亚洲a级在线播放观看| 久久久精品久久| 欧美日韩亚洲网| 美日韩精品免费视频| 在线免费观看羞羞视频一区二区| 综合网日日天干夜夜久久| 91视频国产一区| 91在线观看免费观看| 日韩中文字幕在线播放| 欧美日韩免费网站| www.国产精品一二区| 日本精品久久电影| 欧美日韩一区二区免费在线观看| 91探花福利精品国产自产在线| 色777狠狠综合秋免鲁丝| 欧美福利视频网站| 欧美日韩一区二区免费在线观看| 91久久夜色精品国产网站| 国产精品久久久久久久久久久久| 欧美疯狂性受xxxxx另类| 伊人久久男人天堂| 亚洲女人被黑人巨大进入| 国产女人18毛片水18精品| 亚洲成人精品久久久| 国模精品一区二区三区色天香| 亚洲精品一区久久久久久| 国产成人精品一区二区在线| 国产成人一区二区在线| 亚洲国产欧美一区二区丝袜黑人| 国产视频精品va久久久久久| 国产精品爱久久久久久久| 亚洲精品国精品久久99热| 久热爱精品视频线路一| 国产一区二区三区高清在线观看| 欧美xxxx综合视频| 久久91精品国产| 亚洲日韩欧美视频| 热久久美女精品天天吊色| 欧美人交a欧美精品| 日韩最新在线视频| 亚洲精品成人久久久| 久久久久亚洲精品| 久久手机免费视频| 亚洲欧美国内爽妇网| 国产男人精品视频| 国产精品久久久久久久久久久久久久| 日韩av中文字幕在线免费观看| 7777精品久久久久久| 在线日韩第一页| 亚洲欧美在线第一页| 亚洲精品乱码久久久久久金桔影视| 亚洲白拍色综合图区| 最近2019年日本中文免费字幕| 亚洲aⅴ男人的天堂在线观看| 亚洲第一视频网站| 欧美性xxxx极品高清hd直播| 久久精品国产久精国产思思| 57pao成人国产永久免费| 久久777国产线看观看精品| 国内精品国产三级国产在线专| 国产精品av免费在线观看| 日韩经典第一页| 情事1991在线| 国产xxx69麻豆国语对白| 欧美大片免费观看| 久久久电影免费观看完整版| 欧美性理论片在线观看片免费| 97香蕉久久夜色精品国产| 欧美亚洲午夜视频在线观看| 姬川优奈aav一区二区| 一级做a爰片久久毛片美女图片| 欧美亚洲激情视频| 在线观看国产精品淫| 久久久久亚洲精品国产| 亚洲国产欧美在线成人app| 国产精品热视频| 欧美色播在线播放| 亚洲国产天堂网精品网站| 欧美视频一区二区三区…| 成人福利在线观看| 欧美日韩日本国产| 91精品91久久久久久| 亚洲精品456在线播放狼人| 欧洲亚洲免费视频| 久久久亚洲福利精品午夜| 精品国产自在精品国产浪潮| 不卡av电影院| 欧洲日本亚洲国产区| 亚洲最大的成人网| 国产免费一区二区三区在线观看| 国产精品一区二区三区在线播放| 久久99亚洲热视| 亚洲精品小视频在线观看| 欧美一区二区三区艳史| 亚洲女人被黑人巨大进入al| 国产精品三级久久久久久电影| 亚洲香蕉伊综合在人在线视看| 国产精品视频白浆免费视频| 亚洲人成在线电影| 国产剧情久久久久久| 色综合五月天导航| 亚洲最大激情中文字幕| 久久亚洲私人国产精品va| 欧美日韩中文字幕在线| 成人精品在线视频| 欧美成年人视频网站| 高潮白浆女日韩av免费看| 日韩精品久久久久久福利| 欧美日韩一区二区三区| www国产亚洲精品久久网站| 久久国内精品一国内精品| 亚洲丝袜av一区| 日韩欧美大尺度| 久久久国产一区| 国产视频丨精品|在线观看| 亚洲天堂第一页| 亚洲第一福利网| 成人免费自拍视频| 亚洲va欧美va国产综合久久| 欧美日韩综合视频| 欧美区在线播放| 亚洲精品第一国产综合精品| 欧美精品日韩三级| 国产视频福利一区|