播州区建设局网站,建设商城网站公司百度百科,仓库管理系统需求分析,网站 解决负载缺点#xff1a; 1 不能监测到新增属性或者删除属性 2 不能检测到根据数组索引替换或新增的值。也无法监测数组索引的变化。 由于object.defineproperty#xff08;对象#xff0c;描述#xff0c;对象的某个属性#xff09;其实是对对象的某个属性进行修改#xff0c;因…缺点 1 不能监测到新增属性或者删除属性 2 不能检测到根据数组索引替换或新增的值。也无法监测数组索引的变化。 由于object.defineproperty对象描述对象的某个属性其实是对对象的某个属性进行修改因此必须结合发布订阅模式。发布订阅模式其实是深度遍历对象属性因此在发布订阅之后在beforecreated和created之间进行发布订阅之后再修改属性改变将无法被监测到。
Vue 在 实 例 初 始 化 时 遍 历 data 中 的 所 有 属 性发布订阅模式 并 使 用
Object.defineProperty 把这些属性全部转为 getter/setter。这样
当追踪数据发生变化时setter 会被自动调用。
Object.defineProperty 是 ES5 中一个无法 shim 的特性这也就
是 Vue 不支持 IE8 以及更低版本浏览器的原因。
但是这样做有以下问题
1.添加或删除对象的属性时Vue 检测不到。因为添加或删除的对象
没 有 在 初 始 化 进 行 响 应 式 处 理 只 能 通 过 $set 来 调 用
Object.defineProperty()处理。
2.无法监控到数组下标和长度的变化。
Vue3 使用 Proxy 来监控数据的变化。Proxy 是 ES6 中提供的功能
其作用为用于定义基本操作的自定义行为如属性查找赋值枚
举函数调用等。相对于 Object.defineProperty()其有以下特
点1.Proxy 直接代理整个对象而非对象属性这样只需做一层代理就可
以监听同级结构下的所有属性变化包括新增属性和删除属性。
2.Proxy 可以监听数组的变化。