簡易版本vue的實現和注解


       本文參考的是前輩的簡易版本Vue實現:http://www.cnblogs.com/canfoo/p/6891868.html,感謝。前輩GitHub地址:https://github.com/canfoo/self-vue

       雖然前輩的文章寫的已經很淺顯了,但依然沒有一開始就看懂代碼啊,對了,前輩的文章有它的github地址,上面可以直接下載代碼。

       好在我雖不才卻能堅持,看了一下午終於是入了門,再經過一些試驗性的代碼修改和測試,終於明白是怎么回事了。現在總結如下。

       核心思路:V1還不算完全形態的Vue,所以直接從V2看起。

       具體思路:

       1,將Vue對象里面的data全部作一次監聽。通過get的方式。

       2,一旦data里面的數據發生改變,則被set方法劫持。第一層代理劫持產生內層的賦值

       3,內層觸發了更新依賴的函數,js代碼層次的數據變化更新到dom上面

      4,更新函數通過更該dom節點來更新dom,這個時候更新的不在innerHTML

      將Vue對象里面的data全部作一次監聽。通過get的方式。

 下圖是遍歷,遍歷的結果是data里面的數據,都執行get方法,實際是通過defineProperty的get方法實現的。於是都被緩存到observer里面。

 

       一旦data里面的數據發生改變,則被set方法劫持。第一層代理劫持產生內層的賦值

為了直接修改data里面數據,而不是通過data.方式修改數據,所以做了兩層代理劫持。這個原文作者也有說到。

外層代理

內存代理

內層觸發了更新依賴的函數,js代碼層次的數據變化更新到dom上面

也就是set下的通知函數。實際是告訴Watcher執行update。

更新函數通過更該dom節點來更新dom,這個時候更新的不在innerHTML

這里涉及一個知識點:document.createDocumentFragment();DocumentFragments 是DOM節點。它們不是主DOM樹的一部分。通常的用例是創建文檔片段,將元素附加到文檔片段,然后將文檔片段附加到DOM樹。在DOM樹中,文檔片段被其所有的子元素所代替。

直接修改node的內容就會同步到dom中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM