1 说明

  所谓“数据代理”,是指 通过一个对象代理对另一个对象的属性进行读或写操作。

2 简单示例

2.1 代码

let obj = {x:100};
let obj2 = {y:200};
Object.defineProperty(obj2,"x",{
get(){
return obj.x;
},
set(value){
obj.x = value;
}
})

2.2 效果

  通过obj2代理对obj的属性进行操作,如下所示

  设置obj2.x=333,obj.x值也改变

3 Vue中的数据代理

3.1 代码

<body>

   <div id="root">
<h1>{{name}}</h1>
<h1>{{address}}</h1> </div> <script type="text/javascript" > let data = {
name:'历史',
address:'杭州'
} const vm = new Vue({
el:'#root',
data
}) </script> </body>

3.2 效果

  Vue中的数据代理是:通过vm对象代理对data对象的属性进行操作(读或写),如下所示

  设置vm.name的值,data.name也改变

另外,请注意一点:vm._data === data,返回true

3.3 基本原理

3.3.1 说明

  Vue中数据代理的基本原理是,通过Object.defineProperty()将data对象中的属性添加到vm对象上,并为每个添加到vm上的属性指定getter和setter,在getter和setter中对data对象的属性进行读或写操作

3.3.2 示例

  代码同上

  控制台查看vm对象,发现它有address属性和name属性,还有一个_data属性

  查看这三个属性的值,发现就是data对象的值。

  

  所以vue是这么做的,data对象放在_data里面,且在vm最外层添加了属性address和name,并且给了setter和getter函数,代理data对象

3.3.3 图示

最新文章

  1. springmvc环境搭建以及常见问题解决
  2. 解决php文件乱码
  3. JavaScript中如何中断forEach循环
  4. LWP 轻量级线程的意义与实现
  5. TelephonyManager对黑名单的管理
  6. 浅谈Spark Kryo serialization
  7. Asp.net的内置对象!!!
  8. EXTJS 4.2 资料 控件之combo 联动
  9. MySql 链接url 参数详解
  10. 不root的情况下 查看App的数据表
  11. 从头开始建网站(三)DNS
  12. 批处理删除IIS的everyone、users的访问权限
  13. 朴素的treap
  14. ajax和跨域
  15. VisualSVN服务器的本地搭建和使用
  16. VC++ 实现INI文件读写操作
  17. 二层协议--STP协议总结
  18. [Laravel] 03 - DB facade, Query builder &amp; Eloquent ORM
  19. 【struts2】Struts2的系统架构
  20. 整理 node-sass 安装失败的原因及解决办法

热门文章

  1. .NET应用开发之SQLServer常见问题分析
  2. 前端面试HTML和CSS总结,这一篇就够了!
  3. 【OpenStack云平台】openstack命令行管理之环境变量设置
  4. 【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述
  5. 单例模式实现的多种方式、pickle序列化模块、选课系统需求分析等
  6. vue 项目中,后端返回文件流,导出excel
  7. 如何通过 C#/VB.NET 将 PDF 转为 Word
  8. ping localhost时出现::1的原因以及解决办法
  9. week_4
  10. 基于 Traefik 的激进 TLS 安全配置实践