Vue2响应式原理详解

Object.defineProperty

通过Object.defineProperty方法进行数据代理, 用vm对象的属性来代理data对象的属性

方法案例

 /* 
  此方法用于定义或修改对象属性的方法。它允许你精确地控制属性的行为,
  包括属性的值、可枚举性、可配置性和可写性。 
  接受三个参数:1 要定义属性的对象、2属性名以及一个3描述符对象。
  描述符对象包含了你想要定义的属性的特性。描述符对象的属性包括:
   value: 属性的值,默认为 undefined。
   writable: 属性是否可写,默认为 false。
   enumerable: 属性是否可枚举,默认为 false。
   configurable: 属性是否可配置,默认为 false。*/ 
  

    let person = {} // 定义一个空对象

    Object.defineProperty(person, 'name', {
      value: 'ZhangSan',
      writable: false,
      enumerable: true,
      configurable: false,

    })

    console.log(person.name);

    person.name = "Bob" // 这行代码不会修改 'name' 属性的值,因为 'writable' 属性被设置为 false

    for (let key in person) {
      console.log(key + ': ' + person[key]); // 只会输出 'name: John',因为 'enumerable' 属性被设置为 true
    }

    delete person.name; // 这行代码不会删除 'name' 属性,因为 'configurable' 属性默认为 false

    console.log('name' in
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值