原理:通过vm对象来代理 Vue 中我们自己定义在data中的数据,
首先: 我们自己定义的data中的对象或者属性 都会存储到vm中的_data 中进行数据劫持
其次: 通过Object.defineProperty() 方法的getter 和  setter  将_data中的数据设置到vm本身,从而更方便去使用

学习  Object.defineProperty()    话不多说直接上图

 1 <template>
2 <div class="home">
3 </div>
4 </template>
5
6 <script>
7 // @ is an alias to /src
8
9 export default {
10 name: 'DefinePropoty',
11 components: {
12 },
13 mounted () {
14 var that = this
15 Object.defineProperty(this.person, 'age', {
16 value: 'boy', // 设置值
17 enumerable: true, // 可遍历
18 writable: true, // 是否可以被修改
19 configurable: true, // 控制是否可以被删除
20 // 当有人读取age的属性的时候 get就会呗调用 且get的返回值是age的值
21 get () {
22 return that.number
23 },
24 // 当有人修改age属性的时候 触发 且参数为修改的值
25 set (val) {
26 that.number = val
27 }
28 })
29 // this.$delete(this.person, 'sex') 删除对象的属性
30 // 访问age
31 console.log(this.person.age)
32 // 修改age
33 this.person.age = 666
34 },
35 data () {
36 return {
37 number: 20,
38 person: {
39 name: 'GQ',
40 sex: '男',
41 age: this.number
42 }
43 }
44 }
45 }
46 </script>

实例  : 通过 obj2代理obj1

 1 <template>
2 <div>
3 <!-- 数据代理 修改一个对象的某个属性另外一个对象也随之改变 -->
4 </div>
5 </template>
6
7 <script>
8 export default {
9 name: 'DataMange',
10 mounted () {
11 var that = this
12 // 给obj2添加一个x属性 有人读取就返
13 Object.defineProperty(this.obj2, 'x', {
14 // 有人读取obj2 的x就把obj1的X给他
15 get () {
16 return that.obj1.x
17 },
18 // 有人修改obj2的x就把obj1的x也修改
19 set (val) {
20 that.obj1.x = val
21 }
22 })
23 console.log(that.obj2.x)
24 that.obj2.x = 6666
25 console.log(that.obj1.x)
26 },
27 data () {
28 return {
29 obj1: {
30 x: 66
31 },
32 obj2: {
33 y: 888
34 }
35 }
36 }
37 }
38 </script>
39
40 <style lang="scss" scoped>
41 </style>

vue中的数据代理的更多相关文章

  1. es6中的Proxy和vue中的数据代理的异同

    1:概述 1-1:Proxy 用于修改某些操作的默认行为,Proxy可以说在对对象进行各种访问或者操作的时候在外层进行一层拦截,在操作之前都需要经过这种拦截.proxy返回的是一个新对象,可以通过操作 ...

  2. vue中的数据代理原理

    const vm = new Vue({ data:{ name:'boos' } }) // 注意 :使用构造函数构建vue实例时,传入的是一个option对象,它包含了data,computed等 ...

  3. vue中的数据监听以及数据交互

    现在我们来看一下vue中的数据监听事件$watch, js代码: new Vue({ el:"#div", data:{ arr:[,,] } }).$watch("ar ...

  4. Vue源码中的数据代理

    直接开讲: ​ 由于这个Vue底层封装的函数太多了,我这里只讲思路不说具体的执行了什么函数. ​ const vm=new Vue({这里写一个data,可以是对象也可以是函数}) 在写这段代码的时候 ...

  5. vue中的数据双向绑定

    学习的过程是漫长的,只有坚持不懈才能到达到自己的目标. 1.vue中数据的双向绑定采用的时候,数据劫持的模式.其实主要是用了Es5中的Object.defineProperty;来劫持每个属性的get ...

  6. vue中当数据改变时更新DOM

    具体场景: 当vue中使用swiper, better-scroll时候,我们需要去new Swiper,new [better-scroll]来获取实例,通常我们页面的数据都是异步获取的, 会导致我 ...

  7. vue中访问数据接口的配置

    业务API接口地址: http://localhost:3816/api/ 前端UI浏览地址:http://127.0.0.1:8080/#/home 由于同源策略的问题: 需要配置代理: 在开发环境 ...

  8. vue中axios配置代理的俩种方式及优缺点

    概述:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中 当我们使用vue向服务器发送AJAX请求时,我们会遇到跨域问题,一般跨域的解决方案有俩种,一种是官 ...

  9. 在Vue 中调用数据出现属性不存在的问题

    这已经是我在调用数据时趟过几次的坑了,索性记录下来防止后面再犯: 一般我们请求数据来渲染一个页面的时候,请求下来的数据基本上都是数组或是对象,再通过列表循环和插值表达式渲染的页面:在data 中提前声 ...

  10. vue中展示数据

    1.v-bind,直接把数据绑定进去了.*100是因为传过来的数据为数字0.3这样子,要转换成百分比 2.整个的数据再data中定义之后,就能在页面直接绑定,v-for,v-if等单独再设置.

随机推荐

  1. vuex记录状态

    // actions import { queryProductDetailsById } from '../service' /* * 异步 */ export const addAndGetPro ...

  2. JVM加载中初始化时机?什么时候不会进行初始化?

    初始化的过程是给静态变量赋予指定值以及执行静态代码块的过程. 当遇到new,getstatic,putstatic,invokestatic指令时要进行初始化,也就是new实例化对象,调用静态变量以及 ...

  3. springsecurity-jwt整合

    2 springsecurity-jwt整合 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章http://www.javaman.cn/sb2/jwt 2.1整合springse ...

  4. EasyRelation发布,简单强大的数据关联框架

    当开发人员需要进行关联查询时,往往需要编写大量的冗余代码来处理数据之间的关系.这不仅浪费时间和精力,还会影响项目的可维护性和可扩展性. EasyRelation 是一个简单.高效的自动关联数据框架,可 ...

  5. call、apply 及 bind 函数

    首先从以下几点来考虑如何实现这几个函数 不传入第一个参数,那么上下文默认为 window: 改变了 this 指向,让新的对象可以执行该函数,并能接受参数. 实现call 首先 context 为可选 ...

  6. 重打包APK绕过签名校验

    这里先提一种针对性校强但简单好理解的办法,纯Java实现,代码大概也就50行不到吧. 还有更强的并且能过各种保护(反调试反HOOK反内存修改等等)的万能方法,不过较复杂,长篇大论的,等有空整理出来再提 ...

  7. vue之条件渲染v-if

    目录 说明 语法 示例 说明 "vue条件渲染指令包括v-if.v-else.v-else-if.v-show. 语法 v-if="条件1&&条件2" # ...

  8. idea 热部署插件JRebel

    idea 热部署插件JRebel ​ 当开始开发web项目的时候,需要频繁的修改web页面,此时如果频繁的重启变得很麻烦,因此,可以在idea中集成JRebel插件,改动代码之后不需要重新启动应用程序 ...

  9. w10通过修改注册表实现禁止更新系统

    对于Windows系统更新或驱动更新,并不是越新越好,当然新版本的系统可能带来了许多新的功能.漏洞修补.漂亮的用户界面和流畅的系统优化等,但是新版本的系统和驱动更新有可能会造成CPU占用居高不下,文件 ...

  10. [VMware]虚拟网络编辑器

    虚拟网络编辑器 Vmware > 编辑 > 虚拟网络编辑器 VMnet0 VMnet0:用于虚拟桥接模式网络下的虚拟交换机 vmnet0: 实际上就是一个虚拟的网桥 这个网桥有很若干个端口 ...