1.20 测试嵌套对象使用Object.defineProperty是否有效?

<script>
  const obj = {
    name: 'xjt',
    //嵌套对象obj2
    obj2: {
      name2: 'xjt2'
    }

 //封装 Object.defineProperty()
  function defineReactive(target, key, val) {
    Object.defineProperty(target, key, {
      get() {
        console.log('get:name属性被读取了');
        return val
      },
      set(newValue) {
        console.log('set:name属性被改变了');
        if (val === newValue) {
          return
        }
        val = newValue
      }
    })
  }

  defineReactive(obj.obj2, 'name2', 'xjt000')
  console.log(obj.obj2.name2); //get:name属性被读取了  //xjt000  
  //测试结果:obj.obj2的name2属性可以被监听,因此可以通过递归方式对嵌套对象的属性进行数据劫持
</script>

posted @ 2021-01-20 12:36  17135131xjt  阅读(129)  评论(0编辑  收藏  举报