因为你贴的这篇文章是胡说八道的。为了“解决”卡,用了 Object.freeze();然后“解冻”居然还能用 JSON.parse(JSON.stringify())??能写出这么牛哔的写法也真是人才了。你可千万别学它,你需要的是 Immutable。作者没有上下文语境,但我猜是是 Vue 2.X 项目。Vue 2.X 实现数据监听和双向绑定依赖于遍历执行 Object.defineProperty 实现,当你的列表很大、再加上元素的对象属性比较复杂时,因为这个带来的开销就会很大。所以用 Object.freeze 的作用是告诉 Vue 别去遍历执行 Object.defineProperty,省下了这部分开销。但带来的缺点是数据变化就不能自动刷新视图,需要你手动执行刷新操作。而如果你这个列表不需要体现在视图上的话,压根就不应该放到 $data 里,也就不需要调用 Object.freeze 了。
因为你贴的这篇文章是胡说八道的。
为了“解决”卡,用了
Object.freeze()
;然后“解冻”居然还能用JSON.parse(JSON.stringify())
??能写出这么牛哔的写法也真是人才了。你可千万别学它,你需要的是 Immutable。
作者没有上下文语境,但我猜是是 Vue 2.X 项目。
Vue 2.X 实现数据监听和双向绑定依赖于遍历执行
Object.defineProperty
实现,当你的列表很大、再加上元素的对象属性比较复杂时,因为这个带来的开销就会很大。所以用
Object.freeze
的作用是告诉 Vue 别去遍历执行Object.defineProperty
,省下了这部分开销。但带来的缺点是数据变化就不能自动刷新视图,需要你手动执行刷新操作。而如果你这个列表不需要体现在视图上的话,压根就不应该放到
$data
里,也就不需要调用Object.freeze
了。