回顾Object.defineProperty

本文详细讲解了Object.defineProperty在Vue中的应用,包括数据代理实现原理,如何通过它将data属性映射到vm上,并阐述了数据代理带来的便利性。重点讨论了Vue中使用Object.defineProperty的get和set方法进行属性操作和其在实际项目中的作用。
摘要由CSDN通过智能技术生成

回顾Object.defineProperty方法

let number = 18
let person = {
  name:'张三',
  sex:'男',
}
Object.defineProperty(person,'age',{
  value:18,
  enumerable:true, // 控制属性是否可以枚举(遍历),默认值是false
  writable:true, // 控制属性是否可以被修改,默认值是false
  configuranle:true, // 控制属性是否可以被删除,默认值是false
  // 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
  get:function(){  // 可以缩写 去掉function
      return number
  }
  // 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
  set(value){  // 可以缩写 去掉function
      number = value // 修改的值是value
  }
})

数据代理:

// 数据代理就是通过一个对象代理对另一个对象中属性的操作(读/写)
let obj = {x:100}
let obj2 = {y:200}
// 想通过obj2能读到x  或者修改x
Object.defineProperty(obj2,'x'{
  get(){
    return obj.x
  },
  set(){
    obj.x = value
  }
})

1、Vue中的数据代理:

​ 通过vm对象来代理data对象中属性的操作(读/写)

2、Vue中数据代理的好处:

​ 更加方便的操作data中的数据

3、基本原理:

​ 通过Object . defineProperty() 把data对象中所有属性添加到vm上。

​ 为每一个添加到vm上的属性,都指定一个getter/setter。

​ 在getter/setter内部去操作 (读/写) data中对应的属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Object.defineProperty是一个用来在一个对象上定义新属性或者修改已存在属性的方法。[2]它可以通过设置属性的描述符来控制属性的行为,包括属性的可枚举性、可配置性、可写性以及属性的值等。通过使用Object.defineProperty,我们可以实现对对象属性的监听和控制,从而实现双向数据绑定。 举个简单的例子,假设我们有一个名为person的对象,其中包含name和age两个属性,我们可以通过使用Object.defineProperty来添加一个新的属性sex,并设置它的值为男。代码如下: let person = { name:"码农", age: 18 } Object.defineProperty(person,'sex',{ value:"男" }) console.log(person) 运行以上代码,我们可以在控制台中看到person对象中已经添加了一个名为sex的属性,其值为男。这就是Object.defineProperty的基本用法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue源码学习之Object.defineProperty对象属性监听](https://download.csdn.net/download/weixin_38663151/14904644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Object.defineproperty方法(详解)](https://blog.csdn.net/weixin_57677300/article/details/126278467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屿-·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值