精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Javascript單例模式概念與實(shí)例

開發(fā) 前端
和其他編程語(yǔ)言一樣,Javascript同樣擁有著很多種設(shè)計(jì)模式,比如單例模式、代理模式、觀察者模式等,熟練運(yùn)用Javascript的設(shè)計(jì)模式可以使我們的代碼邏輯更加清晰,并且更加易于維護(hù)和重構(gòu)。本文將介紹Javascript模式中較為常見和實(shí)用的模式——單例模式,主要分為概念和實(shí)例部分。在介紹實(shí)例的同時(shí)也會(huì)對(duì)代碼中額外的知識(shí)點(diǎn)進(jìn)行講解。

前言

和其他編程語(yǔ)言一樣,Javascript同樣擁有著很多種設(shè)計(jì)模式,比如單例模式、代理模式、觀察者模式等,熟練運(yùn)用Javascript的設(shè)計(jì)模式可以使我們的代碼邏輯更加清晰,并且更加易于維護(hù)和重構(gòu)。

本文將介紹Javascript模式中較為常見和實(shí)用的模式——單例模式,主要分為概念和實(shí)例部分。在介紹實(shí)例的同時(shí)也會(huì)對(duì)代碼中額外的知識(shí)點(diǎn)進(jìn)行講解。

單例模式概念

首先什么是單例模式?可以這樣理解:?jiǎn)卫J街荚诒WC一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)全局的訪問點(diǎn)。

可能有人還是不太理解單例的概念,那么你可以想象生活中的一些例子。比如注冊(cè)賬號(hào)的時(shí)候,如果我們注冊(cè)的賬號(hào)已經(jīng)存在,那么系統(tǒng)會(huì)提示我們“賬號(hào)已經(jīng)存在是否使用該賬號(hào)登陸”,我們無(wú)法再次創(chuàng)建一個(gè)一模一樣的賬號(hào),除非把原賬號(hào)注銷。這就是單例模式的生動(dòng)體現(xiàn)。

類似的例子還有網(wǎng)頁(yè)上的登陸彈框,無(wú)論我們點(diǎn)擊多少次登陸按鈕,界面上始終只會(huì)顯示一個(gè)登陸彈框,無(wú)法再創(chuàng)建第二個(gè)。

本文就將以登陸彈框?yàn)槔榻B單例模式的使用方式。

單例模式實(shí)例

1.demo展示

 

 演示地址為:彈框?qū)嵗?/p>

2.代碼展示

構(gòu)建單例模式彈框?qū)嵗拇a每個(gè)人可能寫的都不一樣,但是目的都是一個(gè):構(gòu)建一個(gè)全局唯一并可訪問的彈框。接下來我們一步一步來實(shí)現(xiàn)這個(gè)例子。

(1)獲取DOM對(duì)象

  1. var $ = function(id) { 
  2.  
  3. return typeof id === 'string' ? document.getElementById(id) : id; 
  4.  
  5. };  

首先為了便于之后關(guān)于DOM的一些操作,我們這里利用函數(shù)式編程的原理將獲取目標(biāo)id的元素對(duì)象方法封裝了一下,直接利用$(id)就可以獲取。

(2)彈框構(gòu)造函數(shù)

  1. var Modal = function(id, html) { 
  2.  
  3. this.html = html; 
  4.  
  5. this.id = id; 
  6.  
  7. this.open = false
  8.  
  9. };  

這里我們聲明了一個(gè)Modal作為彈框的構(gòu)造函數(shù),并且再其內(nèi)部定義了公有屬性html、id和open。html用來定義彈框內(nèi)部的內(nèi)容,id用來給彈框定義id名稱,open用于判斷彈框是否打開。

(3)open方法

  1. Modal.prototype.create = function() { 
  2.     if (!this.open) { 
  3.         var modal = document.createElement('div'); 
  4.      
  5.         modal.innerHTML = this.html; 
  6.         modal.id = this.id; 
  7.         document.body.appendChild(modal); 
  8.      
  9.         setTimeout(function() { 
  10.             modal.classList.add('show'); 
  11.         }, 0); 
  12.          
  13.         this.open = true
  14.     } 
  15. };  

我們?cè)贛odal的原型鏈上定義了create方法,方法內(nèi)部我們創(chuàng)建并向DOM中插入彈框,同時(shí)給彈框加上一個(gè)class為"show"的動(dòng)畫效果。這里簡(jiǎn)單介紹下classList:

classList是一個(gè)比className更便捷的操作元素class的屬性,不過在兼容性方面不兼容IE10以下版本:

 其提供的操作class方法和jQuery的類似,主要有

  • add(class1, class2, ...) 在元素中添加一個(gè)或多個(gè)類名,類似jQuery的addClass()
  • remove(class1, class2, ...) 移除元素中一個(gè)或多個(gè)類名,類似jQuery的removeClass()
  • contains(class) 判斷指定的類名是否存在,類似jQuery的hasClass()

這里我們用到了add方法給Modal添加show類。

(4)close方法 

  1. Modal.prototype.delete = function() { 
  2.     if (this.open) { 
  3.         var modal = $(this.id); 
  4.      
  5.         modal.classList.add('hide');  
  6.         setTimeout(function() { 
  7.             document.body.removeChild(modal); 
  8.         }, 200); 
  9.          
  10.         this.open = false
  11.     } 
  12. };  

定義了open方法后我們這里定義關(guān)閉彈框的方法,在其內(nèi)部給彈框?qū)ο筇砑觝ide類動(dòng)畫效果,***在頁(yè)面上移除彈框?qū)ο蟆?/p>

(5)創(chuàng)建實(shí)例

  1. var createIntance = (function() { 
  2.     var instance; 
  3.     return function() { 
  4.         return instance || (instance = new Modal('modal''這是一個(gè)彈框')) 
  5.     } 
  6. })();  

這是實(shí)現(xiàn)單例模式的重要部分,我們來分析下知識(shí)點(diǎn):

  • 使用閉包封裝了instance私有變量并返回一個(gè)函數(shù)
  • 利用 || 語(yǔ)法判斷如果instance不存在則執(zhí)行后者的實(shí)例化Modal方法,存在則直接返回instance,確保了只存在一個(gè)彈框?qū)嵗?/li>

本實(shí)例的創(chuàng)建也可以理解為代理模式的一部分。

(6)按鈕操作

  1. var operate = { 
  2.     setModal: null
  3.     openfunction() { 
  4.         this.setModal = createIntance(); 
  5.         this.setModal.create(); 
  6.     }, 
  7.     deletefunction() { 
  8.         this.setModal ? this.setModal.delete() : ''
  9.     } 
  10. }; 

 這里我們將按鈕操作放在operate對(duì)象里,使得打開和關(guān)閉操作可以通過this獲取實(shí)例setModal。

(7)綁定事件

  1. $('open').onclick = function() { 
  2.     operate.open(); 
  3. }; 
  4.  
  5. $('delete').onclick = function() { 
  6.     operate.delete(); 
  7. };  

***我們將打開和刪除方法綁定到兩個(gè)按鈕上去,至此我們用單例模式實(shí)現(xiàn)的彈框demo就實(shí)現(xiàn)了。

完整代碼請(qǐng)查看:完整代碼

結(jié)語(yǔ)

本文只演示了單例模式的一種實(shí)現(xiàn)方式,至于如何構(gòu)建一個(gè)通用的單例模式就交給有興趣的讀者了。

文章靈感來源于《Javascrit設(shè)計(jì)模式與開發(fā)實(shí)踐》一書。

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2021-03-02 08:50:31

設(shè)計(jì)單例模式

2021-02-01 10:01:58

設(shè)計(jì)模式 Java單例模式

2022-09-29 08:39:37

架構(gòu)

2013-11-26 16:20:26

Android設(shè)計(jì)模式

2016-03-28 10:23:11

Android設(shè)計(jì)單例

2021-09-07 10:44:35

異步單例模式

2011-03-16 10:13:31

java單例模式

2021-02-07 23:58:10

單例模式對(duì)象

2022-06-07 08:55:04

Golang單例模式語(yǔ)言

2022-02-06 22:30:36

前端設(shè)計(jì)模式

2024-03-06 13:19:19

工廠模式Python函數(shù)

2024-02-04 12:04:17

2015-09-06 11:07:52

C++設(shè)計(jì)模式單例模式

2011-06-28 15:18:45

Qt 單例模式

2023-11-21 21:39:38

單例模式音頻管理器

2022-05-23 07:35:15

單例模式懶漢模式靜態(tài)內(nèi)部類

2010-02-05 17:00:06

C++單例模式

2019-06-11 09:50:07

SparkBroadcast代碼

2021-07-27 07:31:16

單例模式關(guān)鍵字

2020-09-16 12:18:28

GoJava模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美大片免费久久精品三p| 久久理论电影网| 欧美激情精品久久久久久久变态| 69久久精品无码一区二区| 在线免费观看的av| 99精品偷自拍| 国产日韩欧美在线看| 免费在线观看国产精品| 免费成人结看片| 欧美一区午夜精品| 六月丁香婷婷激情| 秋霞影院午夜丰满少妇在线视频| 成人午夜短视频| 国产精品福利无圣光在线一区| 国产成人精品视频免费| 国产精品视屏| 欧美人动与zoxxxx乱| 国产二区视频在线| 91网在线播放| av中文字幕亚洲| 成人乱色短篇合集| 无码免费一区二区三区| 国内精品久久久久久久影视蜜臀| 国产亚洲精品久久久优势| 亚洲少妇一区二区| 久久er热在这里只有精品66| 欧美色欧美亚洲高清在线视频| 在线观看日韩羞羞视频| 国产在线观看免费网站| 成人av片在线观看| 亚洲一区二区三区毛片| 中文亚洲av片在线观看| 亚洲综合日韩| 欧美高清在线观看| 国产免费美女视频| 精品国产一区二区三区小蝌蚪 | 欧美激情中文不卡| 好看的日韩精品| 亚洲不卡免费视频| 国产曰批免费观看久久久| 国产精品久久一区主播| 九九精品免费视频| 99热免费精品| 国模吧一区二区三区| 中文字幕在线观看成人| 99re久久最新地址获取| 一区二区在线视频播放| 国产精品成人一区二区三区电影毛片 | 色琪琪久久se色| 国产香蕉97碰碰久久人人| 成年人网站免费在线观看| 韩国女主播一区二区三区| 日韩欧美一级精品久久| 亚洲综合123| 成人黄色理论片| 538在线一区二区精品国产| 日本人视频jizz页码69| 精品久久在线| 欧美日韩国产高清一区二区| 欧美女同在线观看| 欧美视频第一| 91精品婷婷国产综合久久性色| 91看片破解版| 国产亚洲字幕| 日韩久久精品一区| 在线观看免费视频黄| 国产精品videossex| 亚洲精品第一页| 男人天堂av电影| av亚洲在线观看| 日韩中文字幕免费| 欧美黄片一区二区三区| 国产一区美女| 日本视频久久久| 怡红院男人天堂| 国产一区二区91| 国产伦精品一区二区| 三级视频在线播放| 国产精品欧美一级免费| 麻豆视频传媒入口| 91www在线| 欧美日韩精品在线| 15—17女人毛片| 亚洲乱码一区| 亚洲欧美日韩图片| 天堂av免费在线| 欧美色123| 欧美性视频网站| 中文字幕人妻精品一区| 国产精品77777| 欧美黑人xxxxx| 日韩在线免费电影| 亚洲高清一区二区三区| 无码日韩人妻精品久久蜜桃| 精品国产一区二| 日韩精品在线视频| 69xx绿帽三人行| 美女被久久久| 成人高清在线观看| 成年人在线观看| 亚洲妇熟xx妇色黄| 欧美精品激情在线观看| 日韩欧美xxxx| 精品一区二区三区四区五区| 日韩精品免费在线| 久久久久久视频| 日韩一区精品视频| 国产成人精品免费视频大全最热 | 国产美女久久| 日韩精品视频三区| 男人操女人的视频网站| 男人的天堂亚洲在线| 91免费看片网站| 毛片网站在线| 亚洲高清视频中文字幕| 加勒比av中文字幕| 精品产国自在拍| 性欧美亚洲xxxx乳在线观看| 国产又粗又黄又爽| 久久九九影视网| 五十路熟女丰满大屁股| vam成人资源在线观看| 亚洲欧美日韩另类| 日产欧产va高清| 国产精品99久| 在线观看成人av电影| 日本高清不卡一区二区三区视频 | av鲁丝一区鲁丝二区鲁丝三区| 日韩精品91| 国产精品99蜜臀久久不卡二区| 亚洲国产精品久久久久久6q | 精品无码人妻一区二区三| 蜜臀av一区二区在线免费观看| 精品视频一区在线| 啊啊啊久久久| 精品久久99ma| 免费视频一二三区| 国产九九视频一区二区三区| 午夜精品短视频| 精品3atv在线视频| 精品一区二区三区四区| 日本少妇xxxx动漫| 成人aa视频在线观看| 日韩成人手机在线| 一区二区三区国产好| 欧美高清不卡在线| 六月丁香综合网| 亚洲国产综合视频在线观看| 天堂va欧美va亚洲va老司机| 欧美久久一区| 国产二区不卡| 678在线观看视频| 亚洲国产精品一区二区三区| 免费在线观看黄网站| 91麻豆视频网站| 日本精品www| 精品久久精品| 国产精品视频永久免费播放| av网站在线免费观看| 欧美日韩亚洲综合一区二区三区| 嘿嘿视频在线观看| 久久成人综合网| 亚洲第一综合网站| 亚洲精品一区二区三区在线| 久久久久久久久久久久av| 日韩在线观看视频网站| 福利视频导航一区| 色哟哟精品观看| 麻豆成人久久精品二区三区红| 亚洲区一区二区三区| japansex久久高清精品| 久久久久久久色| 亚洲av成人精品日韩在线播放| 色综合久久久久网| 国产精品一区二区亚洲| 久久 天天综合| 337p亚洲精品色噜噜狠狠p| 国产suv精品一区| 日本久久亚洲电影| 秋霞成人影院| 日韩hd视频在线观看| 亚洲av无码不卡| 亚洲图片你懂的| 内射中出日韩无国产剧情| 天堂在线一区二区| 男同互操gay射视频在线看| 东京久久高清| 国产精品手机播放| caoprom在线| 中文国产成人精品久久一| 国产情侣av在线| 欧美午夜美女看片| 小早川怜子一区二区的演员表| 国产成人亚洲综合a∨婷婷| 欧美成人xxxxx| 欧美+日本+国产+在线a∨观看| 国产视频一区二区不卡| 成人免费一区| 久久免费视频网站| 日韩黄色影院| 日韩国产精品视频| 国产女人18毛片水真多| 欧美性xxxxx极品| www青青草原| 日本一区二区三区在线不卡| 精品国产aⅴ一区二区三区东京热| 久久久蜜桃一区二区人| 欧美日韩视频免费| 日韩精品一区二区久久| 久久国产精品久久| 欧美视频二区欧美影视| 国产精品jvid在线观看蜜臀| 国产经典三级在线| 不卡av日日日| 91青青在线视频| 亚洲欧美精品在线| www.激情五月| 欧美日本一区二区三区| 亚洲欧美一区二区三区在线观看| 一区二区三区四区在线免费观看| xxxx日本黄色| 99久久婷婷国产| 老司机av网站| 韩国av一区二区三区四区| 九热视频在线观看| 欧美专区在线| 又粗又黑又大的吊av| 国产精品vip| 91视频成人免费| 久久久久蜜桃| 一区二区三区四区五区视频| 你微笑时很美电视剧整集高清不卡| 国产精品传媒毛片三区| 欧美成人一级| 亚洲综合视频1区| 免费一级欧美在线大片| 91久久久久久国产精品| 日韩黄色三级| 国产精品网址在线| 成人mm视频在线观看| 日韩美女在线观看| 成人免费看黄| 日本成人在线视频网址| 中文字幕乱码中文乱码51精品| 久久免费视频在线| 福利影院在线看| 91精品国产高清自在线看超| av男人的天堂在线观看| 午夜精品一区二区三区av| 波多野结衣在线观看| 久久久久久91| 不卡av免费观看| 97色在线视频观看| 在线成人av观看| 国产不卡av在线| 欧美色999| 国产精品第二页| 日韩综合av| 3d精品h动漫啪啪一区二区| 91成人福利社区| 亚洲一区二区久久久久久久 | 免费看成人av| 一区二区三区视频免费观看| 欧美精品久久久| 欧洲乱码伦视频免费| 亚洲欧美久久234| 91精品国产乱码久久久久久 | 国产一区免费视频| 久久亚洲黄色| 日本精品国语自产拍在线观看| 国产日韩视频在线| 正在播放精油久久| 韩日精品视频| 日韩中文字幕在线视频观看 | 国产精品久久久久久久7电影| 欧美精品总汇| 成人在线激情视频| 国产香蕉精品| 欧美综合激情| 亚洲精品极品少妇16p| 免费人成自慰网站| 免费日韩av| 992kp免费看片| 波多野洁衣一区| 自拍偷拍你懂的| 亚洲一区二区三区四区在线| 日韩 欧美 中文| 欧美日韩国产成人在线免费| 丰满人妻一区二区| 亚洲天堂精品在线| 18av在线视频| 日本久久久久久| 日韩不卡在线视频| 日本一区二区三区免费观看| 亚洲色图欧美| 成人观看免费完整观看| 激情综合色综合久久| 亚洲天堂网一区二区| 亚洲视频资源在线| 91午夜精品亚洲一区二区三区| 日韩一区二区三区精品视频| 日本大片在线观看| 欧美成人激情在线| 九九热线视频只有这里最精品| 91啪国产在线| 大色综合视频网站在线播放| www.成年人视频| 久久www免费人成看片高清| 久久人妻少妇嫩草av无码专区| 国产精品久久久久9999吃药| 久久国产黄色片| 欧美tk—视频vk| 老司机在线视频二区| 国产999精品视频| 成人另类视频| 波多野结衣与黑人| 麻豆91精品视频| 欧美图片第一页| 欧美日韩午夜剧场| 成人h动漫精品一区二区无码| 中文字幕国产精品| 亚洲天堂电影| 国产精品一区二区三区免费观看| 久久久久午夜电影| 污污的视频免费| 日本一区二区动态图| 国产午夜免费福利| 日韩av在线影院| 欧美韩日亚洲| 91精品婷婷国产综合久久蝌蚪| 三级电影一区| 亚洲免费999| 中文字幕 久热精品 视频在线| 欧产日产国产69| 日韩成人在线视频网站| 成人女同在线观看| 国产a一区二区| 黄色成人av网站| 亚洲日本久久久| 亚洲国产一区二区三区青草影视| 国产区精品在线| 久久天堂电影网| 精品国产乱码一区二区三区| 国产成人三级视频| 国产一区二区在线视频| 日本一级特级毛片视频| 欧美精品一二三四| 毛片在线播放a| 亚洲a级在线观看| 最新精品国产| 国模无码视频一区| 午夜精品一区二区三区免费视频| 人妻精品一区二区三区| 午夜精品一区二区三区在线 | 国产剧情av麻豆香蕉精品| frxxee中国xxx麻豆hd| 日韩一区和二区| 毛片网站在线看| 精品一区国产| 日韩中文字幕91| 91免费在线看片| 91精品国产综合久久久久久久| aa在线视频| 国产在线资源一区| 久久久精品网| 香蕉成人在线视频| 欧美一区二区性放荡片| 国产丝袜在线观看视频| 久久精品国产美女| 日韩精品久久理论片| 91香蕉视频网| 精品国产91久久久久久久妲己| 特黄毛片在线观看| 亚洲精品成人a8198a| 国产麻豆视频一区| 在线观看 中文字幕| 亚洲人成77777在线观看网| 日本免费一区二区三区等视频| 国产精品igao激情视频| 91碰在线视频| 国产影视一区二区| 91极品视频在线| 欧美超碰在线| 国产一线在线观看| 欧美亚洲综合久久| 欧美xxxx免费虐| 欧美一区二区三区四区夜夜大片| 久久er精品视频| 少妇一级淫片免费放中国| 精品国产一区二区三区四区在线观看| 一区二区三区免费在线看| 成熟丰满熟妇高潮xxxxx视频| 国产精品视频线看| 免费国产精品视频| 国产精品一区专区欧美日韩| 亚洲国产二区| 女人18毛片毛片毛片毛片区二| 亚洲丁香婷深爱综合| 成人在线视频观看| 国产精品久久中文字幕|