前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一、Vue2笔记--基础篇--06-数据代理(Object.defineproperty方法中的get()、set())

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

作者头像
打不着的大喇叭
发布2024-03-11 16:16:28
1750
发布2024-03-11 16:16:28
举报
文章被收录于专栏:喇叭的学堂

1、回顾Object.defineproperty方法

Object.defineProperty() 方法 * 会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。 ======== 有三个参数,添加后的属性不可以参与遍历:=======

  • 1. 给哪个对象添加属性
  • 2. 添加的属性的名字
  • 3. 配置项
代码语言:javascript
复制
    <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>

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

代码语言:javascript
复制
        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的值,从而实现数据代理

代码语言:javascript
复制
    <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中对应的属性。

代码语言:javascript
复制
<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>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、回顾Object.defineproperty方法
    • 1、enumerable: true // 控制属性是否可以枚举,默认值是false
      • 2、writable:true, // 控制属性是否可以被修改,默认值是false
        • 3、configurable:true // 控制属性是否可以被删除,默认值是false
          • 4、 get() 读取调用 \ set() 修改调用
          • 2、何为数据代理?
          • 3、Vue中的数据代理
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档