Vue中从改变一个数据到页面渲染改变的过程 definedProperty 基础使用: 实现Vue2 双向数据绑定 Proxy用于修改某些操作的默认行为,也可以理解为在目标对象之前架设一层拦截,外部所有的访问都必须先通过这层拦截,因此提供了一种机制,可以对外部的访问进行过滤和修改。这个词的原理为代理,在这里可以表示由它来“代理”某些操作,译为“代理器”。Vue2 利用definedProperty实现数据绑定
var ob={ a:1, b:2 } var _value=ob.a Object.defineProperty(ob,'a',{ //writable:true,//可否修改 //enumerable:false,//是否可被枚举 //configurable:false,//是否可被delete get(){//获取时触发函数 console.log('取值') return _value }, set(a){//修改时触发函数,参数为修改的值 console.log('存值') _value=a return _value }, })
function vue(){ this.$data={a:1}; this.el=document.getElementById('add'); this.virtualdom=""; this.observe(this.$data); this.render; } vue.prototype.observe=function(obj){//数据监听 var value; var self=this; for(var key in obj){ vaule=obj[key]; if(typeof vaue=='object'){ this.observe(value) }else{ Object.defineProperty(obj,key,{ get(){//依赖收集 return value }, set(newValue){//触发更新 value=newValue self.render() }, }) } } } vue.prototype.render=function(){//数据渲染 this.virtualdom="I am "+this.$data.a this.el.innerHTML=this.virtualdom } //数组监听~思想(未具体实现) var arrPro=Array.prototype; var arrayob=Object.create(arrayPro) var arr=['push','pop','shift']; arr.forEach((method,index)=>{ arrayob[methods]=function(){ var ret=arrayPro[methods].apply(this,arguments); dep.notify();//vue源码中体现 return ret; } }) let num=0 let vm=new vue() setInterval(()=>{ console.log('修改') vm.$data.a=num++ },2000)
Vue3 利用proxy实现数据绑定
和defineProperty类似,功能几乎一样,用法不同
实现Vue3双向数据绑定function vue(){ this.$data={a:1}; this.el=document.getElementById('add'); this.virtualdom=""; this.observe(this.$data); this.render; } vue.prototype.observe=function(obj){//数据监听 var self=this; this.$data=new Proxy(this.$data,{ get(target,key){ return target[key] }, set(target,key,newValue){//触发更新 target[key]=newValue self.render() }, }) } vue.prototype.render=function(){//数据渲染 this.virtualdom="I am "+this.$data.a this.el.innerHTML=this.virtualdom } let num=0 let vm=new vue() setInterval(()=>{ console.log('修改') vm.$data.a=num++ },2000)
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算