为什么vue2中 不能用Object.defineProperty劫持数组
- 因为Object.defineProperty是通过劫持对象属性来更改视图的。
- 在数组中,length就是它的属性,而length是个特殊的值,随着数组的增大,使用Object.defineProperty来监听数组下标,就会消耗更高的性能,导致框架性能不稳定,且数组的一些方法,例如push(),splice(),都是直接操作数组本身的,Object.defineProperty()无法监听到数组变化。
- 所以Object.defineProperty不适合监听数组下标。
- vue2为了提高用户使用体验,采用set手动控制响应式更新,并为其添加getter和setter,确保其后续是响应式的。
- 总结:不是Object.defineProperty不能监听数组下标,而是vue2没有用它来监听数组下标。