一、Vue2笔记--基础篇--06-数据代理(Object.defineproperty方法中的get()、set())

目录

1、回顾Object.defineproperty方法

1、enumerable: true        // 控制属性是否可以枚举,默认值是false

2、writable:true, // 控制属性是否可以被修改,默认值是false

3、configurable:true // 控制属性是否可以被删除,默认值是false

4、 get() 读取调用 \ set() 修改调用

2、何为数据代理?

3、Vue中的数据代理


1、回顾Object.defineproperty方法

Object.defineProperty() 方法

* 会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。 

        ======== 有三个参数,添加后的属性不可以参与遍历:=======

  • 1. 给哪个对象添加属性
  • 2. 添加的属性的名字
  • 3. 配置项
    <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() {
                console.log('有人读取age属性了')
                return number
            },

            // 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
            set(value) {
                console.log('有人修改了age属性,且值是', value)
                number = value
            }

        })

        // Object.keys():里面传入一个对象,它可以把里面的属性名提取成一个数组
        // console.log(Object.keys(person))

        console.log(person)
    </script>

 =======================  配 置 项  ========================

        let person = {
            name: '张三',
            sex: '男',
        }

1、enumerable: true        // 控制属性是否可以枚举,默认值是false

2、writable:true, // 控制属性是否可以被修改,默认值是false

3、configurable:true // 控制属性是否可以被删除,默认值是false

4、 get() 读取调用 \ set() 修改调用

当我们读取age属性是,get被调用,返回 number = 18 ,18就成了age的值

当我们修改age属性是,set被调用,传 value = 12 进去【value参数必须写】,在set里面把 number = value,从而改了age的值,变成了12

2、何为数据代理?

数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)【】

下面这里的是用该方法对一个对象绑定 ,通过get读取返回另一个对象x的值,通过set修改操作另一个对象x的值,从而实现数据代理

    <script type="text/javascript">
        let obj = {
            x: 100
        }
        let obj2 = {
            y: 200
        }

        Object.defineProperty(obj2, 'x', {
            get() {
                // 返回另一个对象的值
                return obj.x
            },
            set(value) {
                // 操作另一个对象的值
                obj.x = value
            }
        })
    </script>

3、Vue中的数据代理

        1.Vue中的数据代理:

            通过vm对象来代理data对象中属性的操作(读/写)

        2.Vue中数据代理的好处:

            更加方便的操作data中的数据

        3.基本原理:

            *通过Object.defineProperty()把data对象中所有属性添加到vm上。

            为每一个添加到vm上的属性,都指定一个getter/setter。

            在getter/setter内部去操作(读/写)data中对应的属性。

<body>
    <!-- 准备好一个容器-->
    <div id="root">
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false // 阻止 vue 在启动时生成生产提示。

    const vm = new Vue({
        el: '#root',
        data: {
            name: '尚硅谷',
            address: '宏福科技园'
        }
    })
    console.log(vm._data);
    // Vue 上的 data 存到 vm 的 _data
</script>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Vueset和get方法通常是用于监控Vue实例数据变化的。set方法用于监听数据的变化,并在数据变化时执行相应的操作,例如更新视图或执行一些逻辑。get方法则用于获取数据的值,并在获取时执行相应的操作,例如返回数据前对数据进行格式化或加工。 在Vue,我们可以通过定义set和get方法来实现数据的监听。例如,可以在Vue实例的data选项定义一个属性,并在该属性的set方法定义相应的操作,以实现对该属性的监听: ``` var vm = new Vue({ data: { message: 'Hello' }, watch: { message: function (newValue, oldValue) { console.log('数据变化了') } }, computed: { formatMessage: { get: function () { return this.message.toUpperCase() }, set: function (newValue) { this.message = newValue.toLowerCase() } } } }) ``` 在上面的例子,我们定义了一个名为formatMessage的计算属性,该属性的get方法返回message的大写形式,并在set方法将新值转换为小写后再将其赋值给message属性。在Vue实例,我们可以通过访问formatMessage属性来触发set和get方法,并实现对message属性的监听。 ### 回答2: 在Vueset和get方法是用于监听和获取数据方法set方法是用来修改数据方法。当我们在Vue实例或组件定义了一个属性,可以通过set方法来动态改变这个属性的值。在set方法内部,我们可以根据需要对新值进行一些处理或验证,并最终将其赋值给对应的属性。 例如,在Vue组件定义了一个名为message的数据属性,我们可以通过set方法来改变它的值: ``` set message(newValue) { // 在这里可以对新值进行处理或验证 this._message = newValue; } ``` 在外部使用时,只需对message属性进行赋值,就会触发set方法对新值进行处理: ``` this.message = '新的消息'; ``` get方法是用来获取数据方法。当我们获取一个属性的值时,可以通过get方法来返回触发该属性的值。在get方法内部,我们可以根据需要对返回的值进行处理或额外的操作。 例如,在Vue组件定义了一个名为fullName的计算属性,我们可以通过get方法来返回实时计算的全名: ``` get fullName() { return this.firstName + ' ' + this.lastName; } ``` 在外部使用时,只需使用fullName属性即可获取实时计算的全名: ``` console.log(this.fullName); ``` 综上所述,在Vueset和get方法分别用于动态改变和获取数据的值,我们可以通过这两个方法来对数据进行处理和验证,以及实现计算属性的功能。 ### 回答3: Vueset和get方法是用来操作Vue实例数据的。它们是Vue的响应式系统的核心。 使用set方法可以动态地将一个属性添加到Vue实例,并使其成为响应式的。它接收三个参数:目标对象、属性名和属性值。当调用set方法时,Vue会将属性名和属性值添加到目标对象,并将其设置为响应式的,当属性值发生变化时,Vue会自动更新对应的视图。 get方法用于获取Vue实例的属性值。它接收两个参数:目标对象和属性名。当调用get方法时,Vue会根据目标对象和属性名返回对应的属性值。 使用set和get方法可以快捷地操作Vue实例数据,并且能够保证数据的响应式。例如,我们可以通过set方法添加一个新的属性,并通过get方法获取它的值。这样的操作是非常方便和灵活的。 在Vue实例set和get方法通常是自动调用的,我们不需要显式地调用它们。当我们修改Vue实例的属性值时,Vue会自动检测到变化,并更新相关的视图。这就是Vue的响应式系统的工作原理。 总之,Vueset和get方法是用来操作Vue实例的属性的,可以快捷地添加属性和获取属性值,并且能够保证数据的响应式。它们是Vue响应式系统的核心,非常重要。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

打不着的大喇叭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值