摘要:關(guān)于的設(shè)計(jì)模式,強(qiáng)力推薦這本書(shū)設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐,來(lái)自騰訊的大牛所著。講解設(shè)計(jì)模式之前,我們先接觸一個(gè)重要的概念鴨子類(lèi)型什么叫鴨子類(lèi)型呢需求如果我們想聽(tīng)鴨子的嘎嘎嘎叫聲情況如果有一只狗不是鴨子,它也能發(fā)出嘎嘎嘎的叫聲。
當(dāng)一個(gè)項(xiàng)目的代碼量比較多,或者多人開(kāi)發(fā)的時(shí)候,就需要引入一些設(shè)計(jì)模式來(lái)讓我們更好的構(gòu)建項(xiàng)目。否則代碼就會(huì)變得亂糟糟,像一團(tuán)面條一樣了。
講解設(shè)計(jì)模式比較好的書(shū)有:
1、設(shè)計(jì)模式
2、Head First設(shè)計(jì)模式
不過(guò)以上兩本書(shū)主要是關(guān)于靜態(tài)語(yǔ)言、面向?qū)ο蟮木唧w實(shí)現(xiàn),因?yàn)殪o態(tài)面向?qū)ο笳Z(yǔ)言(比如C++ 和 Java)代碼寫(xiě)法限制的是比較多的。不能給類(lèi)動(dòng)態(tài)的添加屬性、方法,函數(shù)的參數(shù)限制了類(lèi)型等。
JS 雖然也是面向?qū)ο螅峭瑫r(shí)支持函數(shù)式編程,函數(shù)本身是一種值可以傳遞。JS的動(dòng)態(tài)特性也不會(huì)限制變量類(lèi)型。
所以Java 中的多態(tài)對(duì)JS 來(lái)說(shuō),那都不叫事。
對(duì)于 JS ,設(shè)計(jì)模式也應(yīng)該更加靈活,不應(yīng)該把靜態(tài)語(yǔ)言的設(shè)計(jì)模式生搬硬套到 JS 上,而應(yīng)該根據(jù)語(yǔ)言特性靈活應(yīng)用。
關(guān)于 JS 的設(shè)計(jì)模式,強(qiáng)力推薦這本書(shū):JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐,來(lái)自騰訊的大牛所著。
講解設(shè)計(jì)模式之前,我們先接觸一個(gè)重要的概念 鴨子類(lèi)型
什么叫鴨子類(lèi)型呢?
需求:如果我們想聽(tīng)鴨子的 嘎嘎嘎 叫聲 情況:如果有一只狗(不是鴨子),它也能發(fā)出 嘎嘎嘎 的叫聲。也就是說(shuō)這條狗也能達(dá)到我們的目的,那這條狗就是可以用的。 思考:我們不再管這個(gè)對(duì)象到底是不是 instanceof Duck, 而是看它有沒(méi)有 嘎嘎嘎 叫的能力。就是說(shuō)我們不再是面向?qū)ο?,而是面向接口。管它是什么?lèi)型,什么對(duì)象,只要實(shí)現(xiàn)了 嘎嘎嘎 叫的這個(gè)接口,能達(dá)到我們的目的,就可以了。
舉個(gè)例子:
// aDiv 不是數(shù)組,而是 HTMLCollection 對(duì)象 var aDiv = document.getElementsByTagName("div"); // 但是由于 aDiv 也有 length 屬性,因此我們可以像數(shù)組一樣遍歷它 for (var i=0, len=aDiv.length; i接下來(lái)一個(gè)重要的概念是 封裝,把一個(gè)對(duì)象、方法或模塊的內(nèi)部實(shí)現(xiàn)隱藏起來(lái),只暴露接口供外部使用。
JS 最常見(jiàn)的是用立即執(zhí)行函數(shù)封裝局部變量,局部函數(shù),暴露出部分函數(shù)或變量。// 對(duì) ming 這個(gè)對(duì)象進(jìn)行了封裝,privateName 只能在立即執(zhí)行函數(shù)的內(nèi)部使用,外部獲取不到的。 var ming = (function() { // 乳名,外人不知道的 var privateName = "狗蛋"; // 學(xué)名 var publicName = "王小明"; var publicAge = 24; return { age: publicAge, getName: function() { return publicName; } }; }());JS 面向?qū)ο蟛捎玫氖窃涂寺》绞?,而不?Java 類(lèi)和對(duì)象的模式。
因此 JS 生產(chǎn)對(duì)象的方式更像是 細(xì)胞分裂,Object.prototype 作為第一個(gè)細(xì)胞,然后分裂出 Function.prototype 、Array.prototype 、String.prototype 等,分裂出來(lái)的細(xì)胞可以添加自己的屬性和方法。而且 JS 是沒(méi)有 類(lèi) 這個(gè)東東的。
Java 中的類(lèi)像是一個(gè)模具,對(duì)象則是用這個(gè)模具印出來(lái)的,
第一篇文先說(shuō)這么多,后續(xù)再把設(shè)計(jì)模式一一過(guò)一遍。最重要的是,推薦大家看看騰訊大牛的書(shū)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81066.html
摘要:而緩存就是為了解決用戶請(qǐng)求速度與釋放服務(wù)器壓力而生的。瀏覽器緩存則是另外的如個(gè)人見(jiàn)解。緩存的判斷規(guī)則過(guò)期機(jī)制過(guò)期機(jī)制就是瀏覽器根據(jù)緩存的有效期進(jìn)行判斷,如果在有效期內(nèi)就使用緩存,否則就拋棄這個(gè)緩存。否則會(huì)進(jìn)入其他緩存依據(jù)判斷。 [TOC] 簡(jiǎn)介 用戶獲取網(wǎng)絡(luò)資源,需要通過(guò)非常長(zhǎng)的網(wǎng)絡(luò)去服務(wù)器上請(qǐng)求資源,另外服務(wù)端為了應(yīng)對(duì)大量的用戶請(qǐng)求而不斷的提升硬件性能與帶寬。這對(duì)用戶與服務(wù)端都非常的...
摘要:注意本文將正則與中的正則分開(kāi)討論。正則零寬斷言更多參考各種語(yǔ)言對(duì)于正則不同支持參考單行模式與多行模式通過(guò)設(shè)置正則表達(dá)式后的修飾符可開(kāi)啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來(lái)源于語(yǔ)言書(shū)上那幾頁(yè)的介紹, 自己也沒(méi)有用過(guò)幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...
摘要:文章系列設(shè)計(jì)模式單例模式設(shè)計(jì)模式策略模式設(shè)計(jì)模式代理模式設(shè)計(jì)模式迭代器模式設(shè)計(jì)模式發(fā)布訂閱模式設(shè)計(jì)模式命令模式概念組合模式就是用小的子對(duì)象來(lái)構(gòu)建更大的對(duì)象,而這些小的子對(duì)象本身也許是由更小的孫對(duì)象構(gòu)成的。 前言 本系列文章主要根據(jù)《JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐》整理而來(lái),其中會(huì)加入了一些自己的思考。希望對(duì)大家有所幫助。 文章系列 js設(shè)計(jì)模式--單例模式 js設(shè)計(jì)模式--策略...
摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長(zhǎng)后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會(huì)討論安全的類(lèi)型檢測(cè)惰性載入函數(shù)凍結(jié)對(duì)象定時(shí)器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對(duì)寫(xiě)代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...
摘要:簡(jiǎn)介橋接模式將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。同時(shí)橋接模式也有自己的缺點(diǎn)大量的類(lèi)將導(dǎo)致開(kāi)發(fā)成本的增加,同時(shí)在性能方面可能也會(huì)有所減少。 1. 簡(jiǎn)介 橋接模式(Bridge)將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。其實(shí)就是函數(shù)的封裝,比如要對(duì)某個(gè)DOM元素添加color和backgroundColor,可以封裝個(gè)changeColor函數(shù),這樣可以在多個(gè)...
閱讀 711·2021-11-18 10:02
閱讀 2249·2021-11-15 18:13
閱讀 3176·2021-11-15 11:38
閱讀 2963·2021-09-22 15:55
閱讀 3684·2021-08-09 13:43
閱讀 2454·2021-07-25 14:19
閱讀 2462·2019-08-30 14:15
閱讀 3458·2019-08-30 14:15