function factory(name, age){ var user= new Object(); user.name= name; user age= age; user. getIntro= function(){return this.name+'\' s age is ' +this.age; } return user ; var xm= factory( 'xiao ming',20); console. log(xm. getIntro() ) // xiao ming's age is 20
4、工廠模式的概念是什么?
其概念如下:
工廠模式需要3個基本步驟,原料投入、加工過程以及成品出廠,例如以下代碼。
function playerFactory (username){ var user= new object (); user .username = username; return user ; } var xm = playerFactory( 'xiao ming ')
player Factory函數(shù)中傳遞的參數(shù)就是“基本原料的投入”。從 var user= new Object()直到return之前,都屬于“加工過程”。最后的 return就如同“成品出廠”。
5、工廠模式的缺陷是什么?
缺陷如下
(1)沒有使用new關(guān)鍵字,在創(chuàng)建對象的過程中,看不到構(gòu)造函數(shù)實例化的過程。
(2)每個實例化的對象都創(chuàng)建相應(yīng)的變量和函數(shù),因此需要更多的空間進行屬性和方法的存儲,從而降低了性能,造成資源的浪費。
6、說說你對MVC架構(gòu)和MwWM架構(gòu)的理解。
在經(jīng)典的MVC架構(gòu)中,包含3個部分,即模型( Model)、視圖(view)和控制器(Controller)??刂破骺梢栽L問視圖,讓其更新??刂破骺梢栽L問模型,更新數(shù)據(jù)。視圖可以訪問模型,獲取數(shù)據(jù)渲染頁面。
在MwVM架構(gòu)中,包含3個部分,即模型( Model)、視圖(View)和視圖模型(View Model)。視圖模型負責(zé)視圖與模型之間的信息轉(zhuǎn)換,通過欻據(jù)雙向綁定使視圖與模型之間的數(shù)據(jù)得以傳遞。
例如代表性的框架 Angular,它通過數(shù)據(jù)綁定,將模型中的數(shù)據(jù)映射到視圖中,通過事件監(jiān)聽器( event listener),將視圖改變的數(shù)據(jù)存儲在模型內(nèi)
7、什么是事件代理?
事件代理( Event Delegation)又稱為事件委托,是 JavaScript中常用的綁定事件的方式。顧名思義,“事件代理”就是把原本需要綁定到子元素的事件委托給父元素,讓父元素承擔(dān)事件監(jiān)聽的工作。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好處有很多,如減少事件數(shù)量,預(yù)測未來元素,避免內(nèi)存外泄等,有利于提高性能。
8、請說說工廠模式的優(yōu)缺點。
優(yōu)點如下。
(1)一個調(diào)用者想創(chuàng)建一個對象,只要知道它的名稱即可。
(2)擴展性高,如果想增加一個產(chǎn)品,只要擴展一個工廠類即可。
(3)屏蔽產(chǎn)品的具體實現(xiàn),調(diào)用者只需關(guān)心產(chǎn)品的接口。
缺點如下。
每次增加一個產(chǎn)品時,都需要増加一個具體類和對象實現(xiàn)工廠,使得系統(tǒng)中類的個數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時也增加了系統(tǒng)具體類的依賴。
9、單例模式的優(yōu)缺點是什么?
優(yōu)點如下。
(1)提供了對唯一實例的受控訪問。
(2)由于在系統(tǒng)內(nèi)存中只存在一個對象,因此可以節(jié)約系統(tǒng)資源,對于一些需要頻繁創(chuàng)建和銷毀的對象,單例模式無疑能夠提高系統(tǒng)的性能。
(3)可以根據(jù)實際情況的需要,在單例模式的基礎(chǔ)上擴展為雙例模式和多例模式。
缺點如下。
(1)單例類的職責(zé)過重,里面的代碼可能會過于復(fù)雜,在一定程度上違背了“單職責(zé)原則”。
(2)如果實例化的對象長時間不利用,系統(tǒng)會認為它是垃圾而進行回收,這將導(dǎo)致對象狀態(tài)的丟失。
10、使用工廠模式最主要的好處是什么?
好處如下:
(1)把對象的創(chuàng)建集中在一個地方(工廠),在增加新的對象類型的時候,只需要改變工廠方法。當(dāng)不使用工廠模式的時候,改變創(chuàng)建方式則需要四處修改,增加維護成本。
(2)新的對象類型可以很容易地添加進來。
(3)只需要關(guān)心工廠方法返回的對象,不必關(guān)心具體創(chuàng)建的細節(jié)。
11、什么是代理模式?
代理( proxy)模式,即為目標對象指定代理對象,并由代理對象代替目標對象控制客戶端對目標對象的訪問。
12、原型模式和單例模式的區(qū)別是什么?
單例模式就是保證一個類只存在一個實例,只初始化一次,第一次完成初始化以后,在重復(fù)使用的時候,返回的都是這個實例,而不是新建一個實例。如果實例化的對象里面的屬性值已經(jīng)改變,就不能用單例了,只能通過原型模式重新實例化,原型模式允許多次創(chuàng)建實例對象。
13、組合模式的適用性指的是什么?
組合模式是表示對象的“部分-整體”層次結(jié)構(gòu)的一種設(shè)計模式;組合模式將對象組合成樹狀結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),組合模式使得用戶對單個對象和組合對象的使用具有一致性。
14、什么時候要使用組合模式?
在以下情況下使用組合模式
(1)當(dāng)想表示對象的“部分-整體”層次結(jié)構(gòu)(樹狀結(jié)構(gòu))時可以使用組合模式
(2)在希望用戶忽略組合對象與單個對象的不同并且統(tǒng)一地使用組合結(jié)構(gòu)中的所有對象時使用組合模式。
15、設(shè)計模式都有哪些問題?
設(shè)計模式可以讓你用前人總結(jié)的經(jīng)典場景來分析實現(xiàn)某些功能時需要什么角色如何合理地設(shè)置接口、提高系統(tǒng)各個層次的獨立性、降低耦合度等。然而,這也不是絕對的。不論是設(shè)計模式、還是開發(fā)框架,都是為了有效開發(fā)而出現(xiàn)的,但常常出現(xiàn)“殺雞用牛刀”的情況,所以學(xué)的時候最好要多對比,從不同角度理解與測試,不能照搬書中的內(nèi)容,這不是設(shè)計模式的精髓。
16、你在開發(fā)中都用到了哪些設(shè)計模式?它們的作用分別是什么?
毎個模式都描述了一個在開發(fā)環(huán)境中不斷岀現(xiàn)的問題,然后描述了該問題的解決方案。用這種方式,可以無限次地使用那些已有的解決方案,無須再做重復(fù)、相同的工作。
開發(fā)中常用到的模式如下。
singleton:單例模式,用來減少重復(fù)創(chuàng)建對象。
factory:工廠模式,用來解耦。
iterator:迭代器模式,用來遍歷對象。
observer:觀察者模式,用來收發(fā)消息。
templete:模板模式,用來避免執(zhí)行相同的操作。
strategy:策略模式,用來定義算法等。