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