赞
踩
今天vue项目做完,部署到了nginx中,闲暇时间,回看项目,对vue的响应式的实现产生了好奇,于是看了vue的源码和一些大牛们对vue源码的解读,大致初略的了解了vue响应式的是实现原理
1.Vue中修改数据,Vue内部是如何监听message数据的变化的
2.当数据发生改变,Vue是如何知道要通知哪些数据,界面发生刷新
响应式原理:
点击按钮,修改person对象中age属性的改变,触发了defineProperty()中的set()方法,从而把html页面修改了
<body>
<button id="btn">111</button>
<p id="output">24</p>
</body>
var person={name: "xiaojiayu", age: 24,gender: "man"} var output=document.getElementById('output') document.getElementById("btn").onclick=function(){ person.age=30 } Object.keys(person).forEach(key =>{ let value = person[key] Object.defineProperty(person,key,{ set(newValue){ //每当为person.xxx="xxx" 设置新值时,都会调用 console.log('监听到'+ key + '的改变,新的值为'+newValue) //此处可以监听到person.xxx属性改变时候的新值 //那么此时谁正在使用该属性的值,我们就可以告诉它,此时需要改变为新值了 //如何知道页面中谁在用person.xxx的值?解析html代码,获取到哪些人有用这个属性值 output.innerHTML=newValue value=newValue }, get(){ //每当使用person.xxx的时候,都会调用该函数 console.log('有人来获取'+key+'对应的值了') return value } }) })
有关Object.defineProperty()的详细用法,个人推荐这篇博客
https://www.jb51.net/article/143455.htm
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。