vm.$delete
的作用是删除数据中的某个属性。由于Vue.js的变化侦测是使用object.defineProperty实现的,所以如果数据是使用delete关键字删除的,那么无法发现数据发生了变化。为了解决这个问题,vue.js提供了vm.$delete
方法来删除数据中的某个属性,并且此时vue.js可以侦测到数据发生了变化。
一:用法
参考:深入响应式原理
二:实现原理
vm.$delete
方法是为了解决变化侦测的缺陷。在ES6之前,javascript并没有办法侦测到一个属性在object中被删除,所以如果使用delete来删除一个属性,vue.js根本不知道这个属性被删除了。那么,怎样可以让vue.js知道我们删除了一个属性或者从数组中删除了一个元素呢?答案是使用vm.$delete
来删除属性。它帮助我们在删除属性之后自动向依赖发生消息,通知watcher数据发生了变化。