0%

数据代理

<script>
        let obj = {
            x: 100
        }
        let obj2 = {
            y: 200
        }

        //当obj2.x的值被修改时,obj.x的值也会被修改
        Object.defineProperty(obj2, 'x', {
            get() {
                return obj.x
            },
            set(value) {
                obj.x = value
            }
        })
    </script>

1、data先会把数据赋值给_data(下划线),vm就可以通过vm._data(下划线)访问到数据。

2、vm身上被添加name,address属性,只要有人读取name和address,就会通过Object.defineProperty里面的getter读取,只要有人修改vm.name,就会调用Object.defineProperty里面的setter使得vm._data.name也被修改。