Open shawnlin0201 opened 4 years ago
延續上次重構與 clean code 相關議題,而在這兩個議題中不論閱讀或是實作上都會遇到許多疑問,而那些疑問是可以有一定深度的下去追更細部的內容,但究竟要先把當前的內容理解完還是繼續深追下去呢?
結論:
最後決定採用 LIFO(先進後出)來作為學習這些知識的方式。
意思即為:要能理解 OOJS => 理解 class、this、prototype 等等先備知識 => 其中 prototype 又有如 prototype chain 的概念 => ... 繼續深追其內容,直到對其相關的關鍵字有一定程度了解;而這種遍歷(traversal)方式,雖然一定程度的拉長了某個節點的學習時間,但能夠使其觀念更加地完備。
而 Huli 也表示認同這種 bottom-up 由下往上 build 知識的方式。
繼續看看 clean code 的後續章節,其中內容提到蠻多物件、類別的概念,雖然公司有部分專案使用類似的 pattern 進行開發,但沒自己從頭撰寫過的經驗,因此很難體會 clean code 中有關物件、類別的章節與內容。
我嘗試用 OOJS 相關的關鍵字,得到幾個關鍵字 new、 this 、prototype、class 等等內容,但感覺還是很難體會它的概念。 參考網址:https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript
new
this
prototype
class
而續上次重構議題,看完了影片後由於有稍微看過重構那本書,因此還蠻能體會裡面重構的概念與理由;後來也想想,我是不是可以將嘗試這個程式重構成物件導向設計的寫法,看看寫完後是否有什麼啟發。 Sample
寫完後我自己推測使用物件導向設計的概念是:
對程式本身:物件導向設計只是一種思路,其實不用靠它也可以做到,像是原本 todo 範例中的 prototype-based 寫法(不知道有沒有理解錯誤),而 JavaScript 的物件導向最主要依靠 this 的特性來實作物件導向設計,另外也可以使用class 語法糖。
對使用者:比起原本寫法,物件導向是將邏輯封裝成一個介面,因此開發完後可以將這個介面釋放,其他人瞭解介面接的內容就可以快速使用。
對開發者:比起原本寫法,物件導向可以在開發的物件中,快速加入一些屬性(公開、私有)與方法(內部 function 或外部的 prototype),來擴充不同的實體功能,但對於 DOM 操作 selector 需要小心指定到同個元素。
目前大概是想到這些,不過還沒實作過繼承等等內容所以沒能有更深層的體會,但手刻後還是覺得這種設計還蠻有趣的,讓我想到上次提到我自己胡亂模仿 Vue.js 的 Lighten.js,之後有空會陸陸續續把它完善一點(學習開個 repo 的 roadmap 與 project 規劃;參考 Vue Github repo)。
先將基本的 this 的四種機制知識鞏固,接著將 prototype 相關內容重新 survey 一次,並整理成文章。
今天討論了什麼?結論是什麼?
延續上次重構與 clean code 相關議題,而在這兩個議題中不論閱讀或是實作上都會遇到許多疑問,而那些疑問是可以有一定深度的下去追更細部的內容,但究竟要先把當前的內容理解完還是繼續深追下去呢?
結論:
最後決定採用 LIFO(先進後出)來作為學習這些知識的方式。
意思即為:要能理解 OOJS => 理解 class、this、prototype 等等先備知識 => 其中 prototype 又有如 prototype chain 的概念 => ... 繼續深追其內容,直到對其相關的關鍵字有一定程度了解;而這種遍歷(traversal)方式,雖然一定程度的拉長了某個節點的學習時間,但能夠使其觀念更加地完備。
最新的進度是什麼?
繼續看看 clean code 的後續章節,其中內容提到蠻多物件、類別的概念,雖然公司有部分專案使用類似的 pattern 進行開發,但沒自己從頭撰寫過的經驗,因此很難體會 clean code 中有關物件、類別的章節與內容。
我嘗試用 OOJS 相關的關鍵字,得到幾個關鍵字
new
、this
、prototype
、class
等等內容,但感覺還是很難體會它的概念。 參考網址:https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript而續上次重構議題,看完了影片後由於有稍微看過重構那本書,因此還蠻能體會裡面重構的概念與理由;後來也想想,我是不是可以將嘗試這個程式重構成物件導向設計的寫法,看看寫完後是否有什麼啟發。 Sample
寫完後我自己推測使用物件導向設計的概念是:
對程式本身:物件導向設計只是一種思路,其實不用靠它也可以做到,像是原本 todo 範例中的 prototype-based 寫法(不知道有沒有理解錯誤),而 JavaScript 的物件導向最主要依靠 this 的特性來實作物件導向設計,另外也可以使用class 語法糖。
對使用者:比起原本寫法,物件導向是將邏輯封裝成一個介面,因此開發完後可以將這個介面釋放,其他人瞭解介面接的內容就可以快速使用。
對開發者:比起原本寫法,物件導向可以在開發的物件中,快速加入一些屬性(公開、私有)與方法(內部 function 或外部的 prototype),來擴充不同的實體功能,但對於 DOM 操作 selector 需要小心指定到同個元素。
目前大概是想到這些,不過還沒實作過繼承等等內容所以沒能有更深層的體會,但手刻後還是覺得這種設計還蠻有趣的,讓我想到上次提到我自己胡亂模仿 Vue.js 的 Lighten.js,之後有空會陸陸續續把它完善一點(學習開個 repo 的 roadmap 與 project 規劃;參考 Vue Github repo)。
下次報告前要完成哪些事項?
先將基本的 this 的四種機制知識鞏固,接著將 prototype 相關內容重新 survey 一次,並整理成文章。