数据代理机制

目录

前言

Object.defineProperty()

语法

第三个参数配置项

数据代理机制的实现

MVVM分层思想


前言

本文介绍Vue的数据代理机制,也就是通过vue实例对象来代理data对象中的属性的操作

Object.defineProperty()

在介绍vue的数据代理机制前,我们需要先来了解一下Object.defineProperty()这个方法。这个方法是ES5新增的,其作用就是给对象新增属性,或者设置对象原有的属性。

语法

Object.defineProperty(给哪个对象新增属性,'新增的这个属性名叫啥',{给新增的属性设置相关的配置项key:value对})

例:

 let temp ={}
       Object.defineProperty(temp,"color",{
        value:"蓝色"
       })

在控制台直接打印

成功新增了color属性,查询到了新增的value值

第三个参数配置项

value 配置项:"给属性指定值",

writable 配置项:"设置该属性的值是否可以被修改true表示可以修改。false表示不能修改"

getter方法 配置项:"不需要手动调用,当读取属性值的时候,getter方法被自动调用"

                                (getter方法的返回值非常重要,这个返回值就代表这个属性它的值)

setter方法 配置项:"不需要手动调用,当修改属性值的时候,setter方法被自动调用"

                                    (setter方法上是有一个参数的,这个参数可以接收传过来的值)

当配置项当中有setter和getter的时候,value和writable配置项都不能存在

例:

如果不设置writable配置项

设置了writable配置项

设置getter和setter方法

 let temp ={}
       Object.defineProperty(temp,"color",{
        // value:"蓝色",
        // writable:'true'
        get:function(){
            console.log("getter执行了");
        },
        set:function(){
            console.log("setter执行了");
        }
       })

let temp ={}
       Object.defineProperty(temp,"color",{
        // value:"蓝色",
        // writable:'true'
        get:function(){
            console.log("getter执行了");
            return "灰色"
        },
        set:function(val){
            console.log("setter执行了");
            let temp = val
        }
       })

getter方法return返回一个灰色,setter形参接收return过来的数据

数据代理机制的实现

通过getter方法return返回目标对象的属性值,setter接收return过来的值,将接收过来的属性值赋给目标对象属性值从而达到修改代理对象属性值从而间接修改目标对象属性值

 // 目标对象
        let target = {
            msg:"hh"
        }
        // 代理对象
        let proxy = {}

        Object.defineProperty(proxy,'msg',{
            get:function(){
                return target.msg
            },
            set:function(val) {
                target.msg=val
            }
        })

如上代码,我们通过代理对象,对目标对象进行数据的修改

MVVM分层思想

这里就需要引入MVVM分层思想

M:Model(模型/数据)

V:View(视图)

VM:ViewModel(视图模型)

vue框架就起到了一个VM的作用,监听页面视图的变化,将数据反馈到页面视图上,视图和数据双向绑定。

new Vue()实例对象就像代理对象,而data是目标对象,我们访问实例对象就可以间接访问到目标对象上面,起到了数据代理的作用

let vm = new Vue({
            el:'.app',
            data:{
                msg:"hh"
            }
        })

访问vm

通过访问vm属性访问data目标是属性值

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

软工不秃头

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

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

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

打赏作者

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

抵扣说明:

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

余额充值