成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

(譯)《學(xué)習(xí)JavaScript設(shè)計(jì)模式》(一)

ls0609 / 3588人閱讀

摘要:模式并不就是一個(gè)具體的解決方案。我們要記住模式的角色僅僅就是給我們提供一個(gè)解決方案體系。使用本地瀏覽器的方法比如來(lái)選擇所有為的元素。后者毫無(wú)競(jìng)爭(zhēng)力。在本書(shū)的后面我們將繼續(xù)討論更多的設(shè)計(jì)模式。

原書(shū)鏈接Learning JavaScript Design Patterns
水平有限很多地方不通順,錯(cuò)翻漏翻歡迎交流。

什么是模式?

模式是一種可普遍應(yīng)用于軟件設(shè)計(jì)——對(duì)我們前端人員來(lái)講就是JavaScript網(wǎng)絡(luò)應(yīng)用程序的可重用方案?;蛘哒f(shuō)是一種可用于解決很多不同情況的模板。

所以理解模式對(duì)我們來(lái)說(shuō)究竟有什么好處呢?設(shè)計(jì)模式主要有三點(diǎn)優(yōu)勢(shì):

模式是成熟的解決方案: 它使用成熟的技術(shù)為軟件開(kāi)發(fā)中問(wèn)題提供了可靠的方法,這些技術(shù)反映了為模式定義的開(kāi)發(fā)的經(jīng)驗(yàn)和見(jiàn)解。

模式易于重用: 模式通常反映了一個(gè)很好的可適應(yīng)我們本身需求的方法。這個(gè)特征使得它魯棒性很好。

模式有很好的表現(xiàn)力: 模式通常都有一個(gè)解決方案的關(guān)鍵詞用法和語(yǔ)法結(jié)構(gòu),通過(guò)它我們可以讓大型的解決方案表現(xiàn)得更優(yōu)雅。

模式并不就是一個(gè)具體的解決方案。我們要記住模式的角色僅僅就是給我們提供一個(gè)解決方案體系。模式并不能解決所有的設(shè)計(jì)問(wèn)題,也不能取代一個(gè)好的設(shè)計(jì)師,但它確實(shí)能成為設(shè)計(jì)師的好幫手。接下來(lái)我們來(lái)討論一下模式的其他一些優(yōu)勢(shì)。

模式可以防患于未然: 當(dāng)我們的代碼是建立在成熟的模式上時(shí),我們可以花更少的時(shí)間考慮我們的代碼結(jié)構(gòu),而把更多的時(shí)間放在我們的總的解決方案的質(zhì)量上。這是由于模式總是鼓勵(lì)我們以結(jié)構(gòu)化和組織化的方式來(lái)編寫(xiě)代碼,很好地避免了一些未來(lái)重構(gòu)代碼的需求。

模式可以提供文檔化的通用解決方案,不會(huì)被某個(gè)多帶帶問(wèn)題所限制: 這種通用化的方式意味著我們不需要被應(yīng)用(通常是編程語(yǔ)言的不同)所限制,設(shè)計(jì)模式仍然可以改善我們代碼的結(jié)構(gòu)。

特定的模式確實(shí)可以避免重復(fù)來(lái)減少代碼量: 通過(guò)鼓勵(lì)開(kāi)發(fā)者在容易減少代碼重復(fù)區(qū)域更加警惕(比如用一個(gè)通用函數(shù)來(lái)取代減少執(zhí)行函數(shù))。這也就是我們所說(shuō)的讓代碼更加"DRY"。

模式添加到開(kāi)發(fā)者的字典中可以讓他們交流更加方便

頻繁被使用的模式可以隨著開(kāi)發(fā)者在社區(qū)中交流得到改善: 在某些情況這可以引領(lǐng)一種全新的設(shè)計(jì)模式,并讓它更好地適應(yīng)更多的具體情況。這可以保持基于模式的解決方案保持健壯性,甚至超過(guò)點(diǎn)對(duì)點(diǎn)的解決方案。

我們已經(jīng)天天在用模式了

為了理解模式究竟多吊,我們來(lái)回顧一個(gè)jQuery已經(jīng)幫我們解決的元素選擇的問(wèn)題。

假設(shè)我們有個(gè)script,在DOM中為每個(gè)找到的class為"foo"的元素添加一個(gè)計(jì)數(shù)器。效率最高的查詢方法是什么?來(lái)看看下面幾種解決方案:

選擇頁(yè)面中的所有DOM元素并存儲(chǔ)他們的引用,然后通過(guò)正則表達(dá)式(或者其他的方法)來(lái)過(guò)濾只存儲(chǔ)那些class"foo"的元素。

使用本地瀏覽器的方法比如querySelectorAll()來(lái)選擇所有class"foo"的元素。

使用原生方法比如getElementsByClassName()來(lái)類(lèi)似地選擇所需集合。

所以這仨哪個(gè)快呢?事實(shí)上是<3>,它是其他倆的8-10倍。但是天不遂人愿,<3>在IE9以下是沒(méi)用的,一次在<2>和<3>都不支持的環(huán)境下只能使用<1>了。

然而使用jQuery的開(kāi)發(fā)者就不用愁了,因?yàn)樗鼮槲覀冞@些使用外觀模式的把選擇器抽象出來(lái)了。我們后面會(huì)提到,這種模式為以后一些潛在的負(fù)載代碼提供了一些抽象接口(比如$el.css(), $el.animate())。這意味這我們不需要花太多的時(shí)間在實(shí)現(xiàn)細(xì)節(jié)上了。

jQuery還自動(dòng)地根據(jù)我們的瀏覽器來(lái)挑選選擇器方法。

我們可能都熟悉jQuery的$("selector"),同樣是選擇HTML元素,它比起getElementById(), getElementsByClassName(), getElementByTagName()等方法來(lái)說(shuō)方便多了。

我們知道querySelectorAll()也試圖做同樣的事,比較一下使用jQuery的模式VS我們自己來(lái)選擇。后者毫無(wú)競(jìng)爭(zhēng)力(?)。抽象使用模式有現(xiàn)實(shí)價(jià)值。

在本書(shū)的后面我們將繼續(xù)討論更多的設(shè)計(jì)模式。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79399.html

相關(guān)文章

  • 那些年,我的前端/Java后端書(shū)單

    摘要:全文為這些年,我曾閱讀深入理解過(guò)或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書(shū)籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(guò)(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書(shū)籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書(shū)籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書(shū)...

    fxp 評(píng)論0 收藏0
  • 那些年,我的前端/Java后端書(shū)單

    摘要:全文為這些年,我曾閱讀深入理解過(guò)或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書(shū)籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(guò)(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書(shū)籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書(shū)籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書(shū)...

    Tecode 評(píng)論0 收藏0
  • 那些年,我的前端/Java后端書(shū)單

    摘要:全文為這些年,我曾閱讀深入理解過(guò)或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書(shū)籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(guò)(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書(shū)籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書(shū)籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書(shū)...

    VPointer 評(píng)論0 收藏0
  • 那些年,我的前端/Java后端書(shū)單

    摘要:全文為這些年,我曾閱讀深入理解過(guò)或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書(shū)籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(guò)(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書(shū)籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書(shū)籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書(shū)...

    idealcn 評(píng)論0 收藏0
  • 】《學(xué)習(xí)JavaScript設(shè)計(jì)模式》(二)

    摘要:學(xué)習(xí)模式設(shè)計(jì)的過(guò)程中,我們遇到原生模式這玩意兒也不是啥大驚小怪的事。最好的設(shè)計(jì)模式通常不直接給出問(wèn)題的答案,這被人認(rèn)為是解決困難問(wèn)題的必要步驟。 原書(shū)鏈接Learning JavaScript Design Patterns水平有限很多地方不通順,錯(cuò)翻漏翻歡迎交流。 模式測(cè)試,原生模式&約法三章 記住并不是所有的算法啊,最佳實(shí)踐啊,解決方案啊什么的都可以被稱(chēng)為一個(gè)完整的模式的。很可能它...

    lifefriend_007 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<