前端開發(fā)工程師必備系列-幾個(gè)簡單的JS單例模式
JavaScript單例模式
1. 單例模式
單例模式?(Singleton) 的實(shí)現(xiàn)在于保證一個(gè)特定類只有一個(gè)實(shí)例,第二次使用同一個(gè)類創(chuàng)建新對(duì)象的時(shí)候,應(yīng)該得到與第一次創(chuàng)建對(duì)象完全相同的對(duì)象。
當(dāng)創(chuàng)建一個(gè)新對(duì)象時(shí),實(shí)際上沒有其他對(duì)象與其類似,因此新對(duì)象已經(jīng)是單例了
但是如何在對(duì)構(gòu)造函數(shù)使用 new 操作符創(chuàng)建多個(gè)對(duì)象的時(shí)候僅獲取一個(gè)單例對(duì)象呢。
2. 靜態(tài)屬性中的實(shí)例
在構(gòu)造函數(shù)的靜態(tài)屬性中緩存該實(shí)例,缺點(diǎn)在于 instance 屬性是公開可訪問的屬性,在外部代碼中可能會(huì)修改該屬性。
3. 閉包中的實(shí)例
可以把實(shí)例封裝在閉包中,這樣可以保證該實(shí)例的私有性并且保證該實(shí)例不會(huì)在構(gòu)造函數(shù)之外被修改,代價(jià)是帶來了額外的閉包開銷。
當(dāng)?shù)谝淮握{(diào)用構(gòu)造函數(shù)時(shí),它正常返回 this ,然后在以后調(diào)用時(shí),它將會(huì)執(zhí)行重寫構(gòu)造函數(shù),這個(gè)構(gòu)造函數(shù)通過閉包訪問了私有instance變量,并且簡單的返回了該 instance。
4. 惰性單例
有時(shí)候?qū)τ趩卫龑?duì)象需要延遲創(chuàng)建,所以在單例中還存在一種延遲創(chuàng)建的形式,也有人稱之為惰性創(chuàng)建。
網(wǎng)上的帖子大多深淺不一,甚至有些前后矛盾,這篇是做個(gè)簡單的總結(jié),如果發(fā)現(xiàn)錯(cuò)誤,歡迎留言指出~