vue数据代理(上)

简介: 笔记

前言


想要学习vue的数据代理,首先需要知道Object.defineProperty方法,vue的数据劫持,数据代理,计算属性都要到了这个方法


Object.defineProperty方法


顾名思义,就是给对象定义添加属性

首先看一段简单的代码,简单定一个person对象

1.png

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>初始vue</title>
    <!-- 引入vue.js -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <script type="text/javascript">
        // 定义一个对象
        let person={
            name:'张三',
            sex:'男'
        }
    </script>
</body>
</html>

此时我们提需求,需要给person对象新增一个age属性

2.png

浏览器查看打印

3.png

这种方法添加属性的方式虽然麻烦,但是也更加的高级,我们简单的验证下

如果是直接在对象里面添加属性,发现对象的key颜色是一样的

4.png

5.png

如果是通过方法在对象里面添加属性,发现对象的我们使用方法添加的那个key的颜色,和原有的key颜色是不一样的

6.png

可以看到,后来新增的属性明显颜色有点淡

7.png

这个颜色淡说明了什么呢?


它想表达式的是,这个age(通过方法新增的属性)是可以被枚举的,也就是不参与遍历的,我们简单验证下

我们可以使用object.keys方法循环遍历对象的全部key,最终会把对象的key放在一起形成一个数组


defineProperty基本配置项

简单修改下代码,我们首先使用第一种方式,也就是直接添加属性进行遍历key

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>初始vue</title>
    <!-- 引入vue.js -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <script type="text/javascript">
        // 定义一个对象
        let person={
            name:'张三',
            sex:'男',
            age:'18'
        }
        // 给person对象新增一个age属性
        // Object.defineProperty(person,'age',{
        //     value:'18'
        // })
        console.log(Object.keys(person))
        console.log(person)
    </script>
</body>
</html>

8.png

可以看到浏览器控制台三个属性全部打印了9.png

然后修改添加属性方式,通过方法添加,可以看到只剩下两个了,最后新增的那个key没有了,这就验证了枚举是不能被遍历的

10.png11.png

如果我非要通过方法添加属性,还要让他遍历呢?

这时候就需要添加一个属性了

// 控制属性是否可以被枚举 默认false不允许
 enumerable:true

12.png

再来查看控制台,发现枚举key也可以被遍历了

13.png

解决了这个问题,我们继续看,如果我们直接在对象里面添加属性,那么我们可以去修改这个属性的值

14.png15.png

相关文章
|
17天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
14天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
117 64
|
17天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
19 1
|
17天前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
26 1
|
17天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
17天前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
7月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
77 3
|
7月前
|
人工智能 JavaScript 前端开发
毕设项目-基于Springboot和Vue实现蛋糕商城系统(三)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
|
7月前
|
JavaScript Java 关系型数据库
毕设项目-基于Springboot和Vue实现蛋糕商城系统(一)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
186 0
|
7月前
|
JavaScript 前端开发 API
Vue3+Vite+TypeScript常用项目模块详解
现在无论gitee还是github,越来越多的前端开源项目采用Vue3+Vite+TypeScript+Pinia+Elementplus+axios+Sass(css预编译语言等),其中还有各种项目配置比如eslint 校验代码工具配置等等,而我们想要进行前端项目的二次开发,就必须了解会使用这些东西,所以作者写了这篇文章进行简单的介绍。
149 0
Vue3+Vite+TypeScript常用项目模块详解