使用 Object.defineProperty() 來進行數據劫持有什么缺點?
(1)在對一些屬性進行操作時,使用這種方法無法攔截,比如通過下標方式修改數組數據或者給對象新增屬性,這都不能觸發組件的重新渲染,因為Object.defineProperty 不能攔截到這些操作。更精確的來說,對于數組而言,大部分操作都是攔截不到的,只是 Vue 內部通過重寫函數的方式解決了這個問題。
(2)在 Vue3.0 中已經不使用這種方式了,而是通過使用 Proxy 對對象進行代理,從而實現數據劫持。使用Proxy 的好處是它可以完美的監聽到任何方式的數據改變,唯一的缺點是兼容性的問題,因為 Proxy 是 ES6 的語法。