真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JS中單例模式的定義與實(shí)現(xiàn)方法

這篇文章主要講解了JS中單例模式的定義與實(shí)現(xiàn)方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到陸川網(wǎng)站設(shè)計(jì)與陸川網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋陸川地區(qū)。

良好的設(shè)計(jì)模式可以顯著提高代碼的可讀性,降低復(fù)雜度和維護(hù)成本。筆者打算通過(guò)幾篇文章通俗地講一講常見的或者實(shí)用的設(shè)計(jì)模式。

今天先從最簡(jiǎn)單的一個(gè)入手:?jiǎn)卫J健?/p>

文中的示例代碼會(huì)使用 ES6 語(yǔ)法,盡量簡(jiǎn)化不必要的細(xì)節(jié)

概念

單例模式(Singleton)屬于創(chuàng)建型的設(shè)計(jì)模式,它限制我們只能創(chuàng)建單一對(duì)象或者某個(gè)類的單一實(shí)例。

通常情況下,使用該模式是為了控制整個(gè)應(yīng)用程序的狀態(tài)。在日常的開發(fā)中,我們遇到的單例模式可能有:Vuex 中的 Store,Vue 的根實(shí)例任何導(dǎo)出單個(gè)對(duì)象的 ES6 模塊等。

字面量寫法

最簡(jiǎn)單的單例其實(shí)就像下面這樣:

const cat = {
  name: 'mi',
  age: 4
}

了解 const 語(yǔ)法的小伙伴都知道,這只喵是不能被重新賦值的,但是它里面的屬性其實(shí)是可變的。

如果想要一個(gè)不可變的單例對(duì)象:

const cat = {
  name: 'mi',
  age: 4
}

Object.freeze(cat);

這樣就不能新增或修改這只喵上的任何屬性,它變成了 冰凍喵~

如果是在模塊中使用,上面的寫法并不會(huì)污染全局作用域,但是直接生成一個(gè)固定的對(duì)象缺少了一些靈活性。

常用寫法

相對(duì)而言,使用類或工廠方法來(lái)實(shí)現(xiàn)單例更加常用。假設(shè)我們有一個(gè)叫作 Logger 的類,它具有和 Console 相同的 API。

類單例

類的單例寫法非常常用,如果我們想要這么使用它:

const logger = new Logger();
logger.log('msg');

// 這里大概寫了 1000 行代碼

const logger2 = new Logger();
logger.log('new msg');

logger === logger2; // true

即盡管 new 了多次 Logger,它返回的都是同一個(gè)實(shí)例。

下面直接看最實(shí)用的實(shí)現(xiàn)方式:

class Logger {
  constructor () {
    if (!Logger._singleton) {
      Logger._singleton = this;
    }
    return Logger._singleton;
  }
  
  log (...args) {
    console.log(...args);
  }
}

export default Logger;

上面的方式將單例對(duì)象存儲(chǔ)在了構(gòu)造器上,這樣的話不管 new Logger 多少次,返回的都是同一個(gè) Logger 實(shí)例了。

這里有一個(gè)細(xì)節(jié)需要注意,即 new 關(guān)鍵字后面的構(gòu)造函數(shù)如果顯式返回一個(gè)對(duì)象,new 表達(dá)式就會(huì)返回該對(duì)象。

具體可參見 《你不知道的 JavaScript (上卷)》中的 new 綁定相關(guān)章節(jié)。

工廠單例

如果不喜歡用 new 關(guān)鍵字,可以使用工廠方法返回單例對(duì)象。

let logger = null

class Logger {
  log (...args) {
    console.log(...args);
  }
}

function createLogger() {
  if (!logger) {
    logger = new Logger();
  }
  return logger;
}

export default createLogger;

上面的代碼相當(dāng)于在模塊內(nèi)部緩存了 logger 實(shí)例,然后導(dǎo)出了一個(gè)工廠方法。這種寫法在模塊化代碼中比較常見,工廠方法也可以接收參數(shù)用來(lái)初始化單例對(duì)象。

看完上述內(nèi)容,是不是對(duì)JS中單例模式的定義與實(shí)現(xiàn)方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文標(biāo)題:JS中單例模式的定義與實(shí)現(xiàn)方法
地址分享:http://weahome.cn/article/godpjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部