JavaScript設計模式與開發實踐【第一部分】

來源:互聯網
上載者:User

標籤:art   而不是   UNC   設計   hub   ref   優雅   部分   系統   

今天開始閱讀《JavaScript設計模式與開發實踐》,對於設計模式的學習一直渴望已久。

設計模式的定義是:在物件導向軟體設計過程中針對特定問題的簡潔而優雅的解決方案。

其實平時在工作中不知不覺在使用某些設計模式,只是我們不知道而已。

動態類型語言和靜態類型語言
  • 靜態類型語言在編譯時間便已確定變數的類型,而動態類型語言的變數類型要到程式啟動並執行時 候,待變數被賦予某個值之後,才會具有某種類型。
  • 靜態類型語言的優點首先是在編譯時間就能發現類型不符的錯誤,編輯器可以協助我們提前 避免程式在運行期間有可能發生的一些錯誤。並對程式進行一些最佳化工作,提高程式執行速度。
  • 動態類型語言對變數類型的寬容給實際編碼帶來了很大的靈活性。由於無需進行類型檢測,我們可以嘗試調用任何對象的任意方法,而無需去考慮它原本是否被設計為擁有該方法。
    這裡就有一個 鴨子類型 的概念。

“如果它走起 路來像鴨子,叫起來也是鴨子,那麼它就是鴨子。”

利用鴨子類型的思想,我們 不必藉助超類型的協助,就能輕鬆地在動態類型語言中實現一個原則:“面向介面編程,而不是 面向實現編程”。

多態

多態的最根本好處在於,你不必再向對象詢問“你是什麼類型”而後根據得到的答案調用對象的某個行為——你只管調用該行為就是了,其他的一切多態機制都會為你安排妥當。

JavaScript不會進行類型檢查,很容易實現多態,只要你具有這個行為就好。而靜態類型語言需要被設計為可以向上轉型:當給一個類變數 賦值時,這個變數的類型既可以使用這個類本身,也可以使用這個類的超類。

封裝

封裝的目的是將資訊隱藏,封裝應該被視為“任何形式的封裝”,也就是說,封裝不僅僅是隱藏資料,還包括隱藏實現細節、設計細節以及隱藏對象的類型等。

原型模式

在 JavaScript中,每個對象都是從 Object.prototype 對象複製而來的,這樣的話, 我們只能得到單一的繼承關係,即每個對象都繼承自 Object.prototype 對象,這樣的對象系統顯然是非常受限的。
但是我們可以動態地指向其他對象。這樣一來,當對象 a 需 要借用對象 b 的能力時,可以有選擇性地把對象 a 的構造器的原型指向對象 b,從而達到繼承的效果。如下代碼就是常用的原型鏈繼承方式:

var obj = {    name: ‘sven‘};var A = function(){};A.prototype = obj;var a = new A();console.log(a.name); //  sven

Github: https://github.com/Vxee/articles/issues/11

JavaScript設計模式與開發實踐【第一部分】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.