1 JavaScript設計模式深刻分析javascript
私有屬性和方法:函數有做用域,在函數內用var 關鍵字聲明的變量在外部沒法訪問,私有屬性和方法本質就是你但願在對象外部沒法訪問的變量。前端
特權屬性和方法:建立屬性和方法時使用的this關鍵字,由於這些方法定義在構造器的做用域中,因此它們能夠訪問到私有屬性和方法;只有那些須要直接訪問私有成員的方法才應該被設計爲特權方法。java
共有屬性和方法:直接鏈在prototype上的屬性和方法,不能夠訪問構造器內的私有成員,能夠訪問特權成員,子類會繼承全部的共有方法。編程
共有靜態屬性和方法:最好的理解方式就是把它想象成一個命名空間,實際上至關於把構造器做爲命名空間來使用。設計模式
/* -- 封裝 -- */ var _packaging = function(){ //私有屬性和方法 var name = 'Darren'; var method1 = function(){ //... } //特權屬性和方法 this.title = 'JavaScript Design Patterns' ; this.getName = function(){ return name; } } //共有靜態屬性和方法 _packaging._name = 'Darren code'; _packaging.alertName = function(){ alert(_packaging._name); } //共有屬性和方法 _packaging.prototype = { init:function(){ //... } }
JavaScript設計模式的做用 - 提升代碼的重用性,可讀性,使代碼更容易的維護和擴展。api
1.單體模式,工廠模式,橋樑模式我的認爲這個一個優秀前端必須掌握的模式,對抽象編程和接口編程都很是有好處。函數
2.裝飾者模式和組合模式有不少類似的地方,它們都與所包裝的對象實現一樣的接口而且會把任何方法的調用傳遞給這些對象。裝飾者模式和組合模式是本人描述的較吃力的兩個模式,我我的其實也沒用過,因此查了不少相關資料和文檔,請你們海涵。優化
3.門面模式是個很是有意思的模式,幾乎全部的JavaScript庫都會用到這個模式,假如你有逆向思惟或者逆向編程的經驗,你會更容易理解這個模式(聽起來有挑戰,其實一接觸你就知道這是個很簡單的模式);還有配置器模式得和門面模式一塊拿來講,這個模式對現有接口進行包裝,合理運用能夠不少程度上提升開發效率。這兩個模式有類似的地方,因此一塊理解的話相信都會很快上手的。this
4.享元模式是一種以優化爲目的的模式。.net
5.代理模式主要用於控制對象的訪問,包括推遲對其建立須要耗用大量計算資源的類得實例化。
6.觀察者模式用於對對象的狀態進行觀察,而且當它發生變化時能獲得通知的方法。用於讓對象對事件進行監聽以便對其做出響應。觀察者模式也被稱爲「訂閱者模式」。
7.命令模式是對方法調用進行封裝的方式,用命名模式能夠對方法調用進行參數化和傳遞,而後在須要的時候再加以執行。
8.職責鏈模式用來消除請求的發送者和接收者之間的耦合。
單體(Singleton)模式
使用單體的方法就是用一個命名空間包含本身的全部代碼的全局對象
工廠(Factory)模式
提供一個建立一系列相關或相互依賴對象的接口,而無需指定他們具體的類。
橋接(bridge)模式
橋接模式的做用在於將實現部分和抽象部分分離開來, 以便二者能夠獨立的變化。在實現api的時候, 橋接模式特別有用
觀察者模式
div.onclick = function click (){ alert ( ''click' ) }