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