当前位置: 首页> 房产> 建筑 > 中天建设集团有限公司第一建设公司_产品规划_百度网盘app官网_百度搜索使用方法

中天建设集团有限公司第一建设公司_产品规划_百度网盘app官网_百度搜索使用方法

时间:2025/7/14 22:32:16来源:https://blog.csdn.net/2301_76671906/article/details/145764800 浏览次数:0次
中天建设集团有限公司第一建设公司_产品规划_百度网盘app官网_百度搜索使用方法

1.vue2响应原理

1.1对于对象与数组

对象类型: 通过 object.defineProperty() 对属性的读取、修改进行拦截 (数据劫持)

数组类型:通过重写更新数组的一系列方法来实现拦截。 (对数组的变更方法进行了包裹)

 Vue2的响应式是基于Object.defineProperty实现的

1.2 基本原理Object.defineProperty

        把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是 Vue 不支持 IE8 以及更低版本浏览器的原因。

// 响应式函数
function reactive(obj, key, value) {Object.defineProperty(data, key, {get() {console.log(`访问了${key}属性`)return value},set(val) {console.log(`将${key}由->${value}->设置成->${val}`)if (value !== val) {value = val}}})
}
const data = {name: '林三心',age: 22
}
Object.keys(data).forEach(key => reactive(data, key, data[key]))
console.log(data.name)
// 访问了name属性
// 林三心
data.name = 'sunshine_lin' // 将name由->林三心->设置成->sunshine_lin
console.log(data.name)
// 访问了name属性
// sunshine_lin
// 接着上面代码data.hobby = '打篮球'
console.log(data.hobby) // 打篮球
data.hobby = '打游戏'
console.log(data.hobby) // 打游戏

        data新增了hobby属性,进行访问和设值,但是都不会触发get和set,所以弊端就是:Object.defineProperty只对初始对象里的属性有监听作用,而对新增的属性无效。这也是为什么Vue2中对象新增属性的修改需要使用Vue.$set来设值的原因。 

1.3 存在问题

新增,删除属性,页面未更新。

直接通过下标修改数组,页面未自动更新。

确保数据响应式如下

vue2-this.$set($delete,$get)确保数据响应性的实例方法-CSDN博客文章浏览阅读484次,点赞21次,收藏17次。this.$set确保数据响应性的实例方法 https://blog.csdn.net/2301_76671906/article/details/145710361?fromshare=blogdetail&sharetype=blogdetail&sharerId=145710361&sharerefer=PC&sharesource=2301_76671906&sharefrom=from_link

2.vue3响应原理

Vue3的响应式是基于ES6的Proxy来实现

对应学习来自于此处,学习记录

https://segmentfault.com/a/1190000041207010https://segmentfault.com/a/1190000041207010

关键字:中天建设集团有限公司第一建设公司_产品规划_百度网盘app官网_百度搜索使用方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: