国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

利用ES6實現單例模式及其應用詳解

2024-05-06 16:41:19
字體:
來源:轉載
供稿:網友

前言

在傳統開發工程師眼里,單例就是保證一個類只有一個實例,實現的方法一般是先判斷實例存在與否,如果存在直接返回,如果不存在就創建了再返回,這就確保了一個類只有一個實例對象。在JavaScript里,單例作為一個命名空間提供者,從全局命名空間里提供一個唯一的訪問點來訪問該對象。

單例模式的定義是:保證一個類僅有一個一個實例,并提供一個訪問它的全局訪問點。

單例模式能在合適的時候創建對象,并且創建唯一的一個。

代碼接近于生活,很有意思。比如一個網站的登錄,點擊登錄后彈出一個登錄彈框,即使再次點擊,也不會再出現一個相同的彈框。又或者一個音樂播放程序,如果用戶打開了一個音樂,又想打開一個音樂,那么之前的播放界面就會自動關閉,切換到當前的播放界面。這些都是單例模式的應用場景。

要實現一個單例模式,一個經典的方式是創建一個類,類中又一個方法能創建該類的實例對象,還有一個標記,記錄是否已經創了過了實例對象。如果對象已經存在,就返回第一次實例化對象的引用。

單例模式的實現

es5實現方式

var Singleton = function(name) { this.name = name; //一個標記,用來判斷是否已將創建了該類的實例 this.instance = null;}// 提供了一個靜態方法,用戶可以直接在類上調用Singleton.getInstance = function(name) { // 沒有實例化的時候創建一個該類的實例 if(!this.instance) {  this.instance = new Singleton(name); } // 已經實例化了,返回第一次實例化對象的引用 return this.instance;}

用戶可以通過一個廣為人知的接口,對該實例進行訪問。

我們嘗試對該對象進行兩次實例化,觀察兩次實例化結果是否指向同一個對象。

var a = Singleton.getInstance('sven1');var b = Singleton.getInstance('sven2');// 指向的是唯一實例化的對象console.log(a === b);

返回結果是:true。說明a、b之間是引用關系。

es6實現方式

創建Singleton類。class關鍵字和靜態函數都是es6新增的。

class Singleton { constructor(name) {  this.name = name;  this.instance = null; } // 構造一個廣為人知的接口,供用戶對該類進行實例化 static getInstance(name) {  if(!this.instance) {   this.instance = new Singleton(name);  }  return this.instance; }}

單例模式應用實例

我們用一個生活中常見的一個場景來說明單例模式的應用。

任意一個網站,點擊登錄按鈕,只會彈出有且僅有一個登錄框,即使后面再點擊登錄按鈕,也不會再彈出多一個彈框。這就是單例模式的典型應用。接下來我們實現它。為了注重單例模式的展示,我們把登錄框簡化吧
注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彩票| 酉阳| 兴仁县| 五台县| 云阳县| 垦利县| 县级市| 师宗县| 怀安县| 绥芬河市| 宿迁市| 赣州市| 楚雄市| 玉林市| 将乐县| 双流县| 台安县| 铅山县| 石楼县| 凉城县| 广汉市| 论坛| 漳州市| 电白县| 革吉县| 登封市| 祁阳县| 包头市| 观塘区| 永善县| 五寨县| 通州区| 栖霞市| 广安市| 祁连县| 温宿县| 革吉县| 宝清县| 英山县| 安庆市| 灵台县|