Vue中Object.defineProperty()缺點和Proxy優勢


Vue2.X通過Object.defineProperty()來劫持各個屬性的setter,getter,新版本通過Proxy劫持屬性

Proxy優勢

支持數組,其實還不止

Object.defineProperty() 的問題主要有三個:

  • 不能監聽數組的變化
  • 必須遍歷對象的每個屬性
  • 必須深層遍歷嵌套的對象
  • 1、數據規模是否龐大。創建Vue實例的時候,一旦對象是一個深層的引用(老千層餅了),遞歸進行Observer的創建顯然會花很多時間;

    2、對所有屬性的變化進行監聽,也需要消耗不小的內存;

    3、新增/刪除屬性的時候,怎么調用/卸載defineProperty;

    4、vue2的官方文檔,對開發者說明了defineProperty的一些限制,比如說數組在兩種情況下是無法監聽的:

    1、利用索引直接設置一個數組項時,例如:arr[indexOfItem] = newValue;

    2、修改數組的長度時,例如:arr.length = newLength;

     

Proxy 在 ES2015 規范中被正式加入,它有以下幾個優勢點

    • 針對對象:針對整個對象,而不是對象的某個屬性,所以也就不需要對 keys 進行遍歷。這解決了上述 Object.defineProperty() 第二個問題

    • 支持數組:Proxy 不需要對數組的方法進行重載,省去了眾多 hack,減少代碼量等於減少了維護成本,而且標准的就是最好的。

    • Proxy 的第二個參數可以有 13 種攔截方法,這比起 Object.defineProperty() 要更加豐富

    • Proxy 作為新標准受到瀏覽器廠商的重點關注和性能優化,相比之下 Object.defineProperty() 是一個已有的老方法,可以享受新版本紅利。


免責聲明!

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



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