mvvm模型、数据代理

152 阅读1分钟

mvvm模型

  1. M:模型(model)对应data中的数据
  2. V:视图(View)模板
  3. VM:视图模型(Viewmodel)Vue实例对象
  4. MVVM:在vue出现之前就存在,vue只是借鉴了其中的一些规则,所以通常使用vm代表vue实例
  5. data上所有的属性最后都会出现在vm身上
  6. vm身上所有的属性及vue原型上所有的属性,在vue模板上都可以直接使用

数据代理(object.defineproperty)

定义:通过一个对象代理对另一个对象中的属性(读/写)

 <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:function(){
                return number
            },
            //当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体的值
            set(value){
                number=value
            }
        })
    </script>

vue中的数据代理

  1. 通过vm对象来代理data对象属性的操作
  2. 好处:更加方便的操作data中的数据
  3. 原理:
  • 通过Object.defineProperty()把data对象中的所有属性添加到vm上
  • 为每一个添加到vm上的属性都指定一个getter和setter
  • 在getter和setter内部去操作(读写)data中对应的属性