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

相关文章
|
2天前
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
10 3
|
2天前
|
缓存 JavaScript
Vue 中 computed 与 method 的区别
【10月更文挑战第15天】computed 和 method 是 Vue 中两个重要的选项,它们在功能和特点上存在着明显的区别。理解并合理运用它们的区别,可以帮助我们构建更高效、更具可维护性的 Vue 应用。在实际开发中,要根据具体情况灵活选择使用,以满足不同的需求。
5 2
|
2天前
|
JavaScript 搜索推荐 UED
vue的自定义指令
【10月更文挑战第14天】Vue 自定义指令为我们提供了一种强大的工具,使我们能够更灵活地控制和扩展 Vue 应用的行为。通过合理地使用自定义指令,可以提高开发效率,增强应用的功能和用户体验。
|
20小时前
|
JavaScript 前端开发 Java
vue2知识点:Vue封装的过度与动画
vue2知识点:Vue封装的过度与动画
7 0
|
2天前
|
JavaScript UED
在 Vue 中使用自定义指令
【10月更文挑战第14天】通过合理地使用自定义指令,可以为 Vue 应用带来更多的灵活性和扩展性,提高开发效率和用户体验。
|
JavaScript 前端开发
模拟Vue数据的双向绑定
Vue的数据双向绑定功能一直为人称道, Vue数据的双向数据绑定主要依赖了Object.defineProperty,这里尝试用最简单的代码, 实现数据的双向绑定Demo MVVM ViewModel基本实现原理 Gi...
931 0
|
4天前
|
JavaScript 前端开发 开发者
Vue v-for 进阶指南:in 与 of 的区别及应用场景 | 笔记
Vue.js 中的 v-for 是强大的遍历指令,但其中的 in 和 of 关键字往往被开发者忽视。尽管它们的用法相似,但适用的场景和数据结构却各有不同。本文将详细探讨 v-for 中 in 和 of 的区别、适用场景以及在实际开发中的最佳使用时机。通过理解它们的差异,你将能够编写更加高效、简洁的 Vue.js 代码,灵活应对各种数据结构的遍历需求。
40 6
|
3天前
|
JavaScript
|
4天前
|
缓存 JavaScript 前端开发
Vue 中动态导入的注意事项
【10月更文挑战第12天】 在 Vue 项目中,动态导入是一种常用的按需加载模块的技术,可以提升应用性能和效率。本文详细探讨了动态导入的基本原理及注意事项,包括模块路径的正确性、依赖关系、加载时机、错误处理、缓存问题和兼容性等,并通过具体案例分析和解决方案,帮助开发者更好地应用动态导入技术。
|
4天前
|
JavaScript API
vue 批量自动引入并注册组件或路由等等
【10月更文挑战第12天】 vue 批量自动引入并注册组件或路由等等