懶人封裝(懶惰模式)
●?本文旨在一些特殊的封裝上
●?一般會用于處理瀏覽器兼容性的封裝
●?但是看完會對你有一些啟發(fā)也說不定哦 O(∩_∩)O~
一段簡單的代碼
●?我們在封裝 ajax 請求的時候
●?基于原生 js 的 ajax 代碼, 如果考慮到瀏覽器兼容問題
●?那么我們一定會看到以下幾段代碼
開始第一次封裝
想到就做, 我們就來進(jìn)行一次封裝試試看
我這里并沒有寫完整, 只是簡單一個小示例
我們來分析一下這個事情
○?我們的判斷種類可能有很多種, 比如 A B C D 四種
●?代碼可能就變成了這個樣子
●?可能有的小伙伴會想到, 我改成 策略模式 封裝不就好了
我要說的不是這個問題
○?不管你改成什么模式封裝, 哪怕是起飛模式
○?如果你當(dāng)前需要匹配到的內(nèi)容是 D
○?那么每調(diào)用一次, 都會從 A 開始判斷一次
○?然后到達(dá) D
●?想象一下, 如果調(diào)用了 100 次, 那么每次的前三個判斷是不是都浪費(fèi)了呢
●?好像是這樣的
○?那我們是不是可以考慮換一個方式來搞一下
懶惰模式封裝這段代碼
●?我們能不能考慮一下, 我封裝完畢的代碼, 只有第一次調(diào)用的時候會判斷
●?后面調(diào)用的時候不在判斷了, 那么是不是會節(jié)省很多呢 ?
●?想到就做
○?原則就是多個事情依次完成
○?前一個成功了, 后面的不做了
○?只要成功過一次, 以后就不在嘗試了
1.? 把我們需要做的幾個事情放在幾個函數(shù)內(nèi)
●?這樣一來, 如果第一個能成功, 那么我們調(diào)用第一個函數(shù)就回得到對應(yīng)的 ajax 對象了
●?如果第一個不行, 我們就嘗試第二個
2.? 接下來我們把四個函數(shù)放在一個數(shù)組內(nèi), 遍歷依次執(zhí)行
●?只要找到一個合適的就行了
●?問題隨之而來了, 如果第一個不對, 那么會報錯
●?我的代碼就全部掛掉了
3.? 嘗試使用 try catch 解決問題
●?為了不讓我的代碼掛掉
●?我們改用 try catch 來解決問題
●?錯了也不需要做什么 , 直接下一次就好了
●?看上去挺好, 但是問題依舊沒有解決
4.? 單獨(dú)制作一個函數(shù)
●?我的原則就是, 讓這個函數(shù)第一次調(diào)用和第二次調(diào)用不是一個函數(shù)就好了
●?也就是我要在第一次調(diào)用完畢以后修改這個函數(shù)
●?看似沒有什么改變,但是之一第 28 行的代碼,有一個重寫 createXHR
●?這個是整個”惰性思想”的核心,也就是說,我只有在當(dāng)前瀏覽器中,第一次執(zhí)行 createXHR 的時候是這個函數(shù)
●?一旦找到一個合適的創(chuàng)建 ajax 對象的方法以后,那么從第二次執(zhí)行 createXHR 開始,就全部都是我們之前數(shù)組中的某一個函數(shù)了
●?再也不用循環(huán)判斷,而是直接用一種有效的方法創(chuàng)建一個 ajax 對象了
●?這個是一種 js 中的高級編程思想,如果理解不了,就用我們最開始寫的判斷的形式來進(jìn)行就可以,慢慢體會一段時間就能明白了
完整代碼
●?從此以后, 你就去隨便調(diào)用吧
●?只有第一次的時候會進(jìn)行判斷, 后面的時候都不會進(jìn)行判斷了
●?直接就能使用那個最準(zhǔn)確的了