数据代理: 通过一个对象代理对另一个对象中属性的操作(读/写)

数据代理

Object.defineProperty()

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

Object.defineProperty(obj, prop, desc)
  • obj 需要定义属性的当前对象
  • prop 当前需要定义的属性名
  • desc 属性描述符

属性描述符

数据描述符

  • configurable:是否可以重新定义

  • enumerable:是否可以枚举

  • value:初始值

  • writable:是否可以修改属性值

访问描述符

  • get:是一个回调函数,根据其他相关的属性动态计算得到当前属性值
  • set:也是一个回调函数,监视当前属性值的变化,更新其他相关的属性值
<script type="text/javascript" >
let number = 18
let person = {
name:'张三',
sex:'男',
} Object.defineProperty(person,'age',{
// value:18,
// enumerable:true, //控制属性是否可以遍历,默认值是false
// writable:true, //控制属性是否可以被修改,默认值是false
// configurable:true //控制属性是否可以被删除,默认值是false //当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
get(){
console.log('有人读取age属性了')
return number
}, //当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
set(value){
console.log('有人修改了age属性,且值是',value)
number = value
} }) // console.log(Object.keys(person)) </script>

VUE中的数据代理

Vue中的数据代理:通过实例对象vm来代理data对象中属性的操作(读/写)

基本原理:

  • 通过Object.defineProperty()把data对象中所有属性添加到vm上。
  • 为每一个添加到vm上的属性,都指定一个getter/setter。
  • 在getter/setter内部去操作(读/写)data中对应的属性。
//通过一个对象代理对另一个对象中属性的操作(读/写)-->
let obj = {x:100}
let obj2 = {y:200} Object.defineProperty(obj2,'x',{
get(){
return obj.x
},
set(value){
obj.x = value
}
})

最新文章

  1. java设计模式之策略模式
  2. 第12章 Java字符串
  3. Install Houdini 12.5 x64 in CentOS 7
  4. Java基础(9):Java生成随机数一定范围内的数的一个典型例子
  5. uva514(trail)(模拟栈)
  6. lua for循环
  7. 一路走过的2013,welcome to 2014
  8. 模板方法模式(Template Pattern)
  9. unix 常用命令
  10. C/C++与lua实现互调
  11. Golang学习笔记:包制作
  12. kotlin, 一种新的android平台一级开发语言
  13. ruby如何查找一个方法属于哪个类
  14. Eclipse两种部署web项目方法
  15. Pre-shared key
  16. svn 使用教程
  17. C#获取Html中的图片元素路径
  18. linux VIM 下的语法高亮及自动缩进
  19. vuex是什么?怎么使用?哪种功能场景使用它?
  20. RabbitMQ Dead Lettering(死信)

热门文章

  1. requests接口自动化-列表与字典参数化
  2. whistle手机抓包(以安卓手机为例)
  3. 华为云计算IE面试笔记-云磁盘和普通磁盘的区别。
  4. 定要过python二级选择题二套
  5. CF1039D-You Are Given a Tree【根号分治,贪心】
  6. Springboot2.0整合Redis(注解开发)
  7. salesforce零基础学习(一百零八)MFA
  8. 1-基本建表sql语句
  9. 从零入门 Serverless | SAE 的远程调试和云端联调
  10. mysql锁场景及排查