我在整理javascript高级程序设计的笔记的时候看到面向对象设计那章,讲到对象属性分为数据属性和访问器属性,我们平时用的js对象90%以上都只是用到数据属性;我们向来讲解下数据属性和访问器属性到底是什么? 数据属性:数据属性包含一个数据值的位置,在这个位置可以读取和写入值. 访问器属性:访问器属性不包含数据值;他们包含一对getter和setter函数在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值,在写入访问器属性时,会调用setter函数并传入新值. 这里介绍的重点是访问器属性,设置对象的访问器属性只能用es5的Object.defineProrerty()方法, 在JavaScript的世界里,双向数据绑定是一项强大的特性,它允许视图和模型之间的数据自动同步。在Angular和Vue这两个流行的前端框架中,这一机制是核心功能之一。本文将深入探讨Vue的双向数据绑定实现原理,同时也简要提及Angular的实现方式。 我们需要理解JavaScript对象中的数据属性和访问器属性。数据属性,如其名,是用来存储数据的,我们可以直接读取和修改它的值。例如,`book.year = 2005` 直接改变了数据属性的值。而访问器属性则不直接存储数据,而是通过getter和setter函数来控制对数据的访问。当我们尝试读取访问器属性时,会触发getter,写入时则触发setter。在ES5中,我们使用`Object.defineProperty()`来定义访问器属性。 Vue的双向数据绑定基于访问器属性实现。当你在Vue组件的`data`选项中声明一个属性时,Vue实际上会将其转换为访问器属性,具有定制的getter和setter。这些getter和setter使得每次对属性的读取或修改都能触发相应的回调,从而更新视图或模型。例如,当我们在模板中绑定一个属性到`v-model`时,Vue会在背后默默地使用这些getter和setter来实现数据的实时同步。 在Vue中,每个组件实例都有一个响应式系统,该系统追踪所有数据依赖,以便在数据发生变化时,能够高效地更新相关的视图。这就是为什么无论你在何处改变数据(例如在`mounted`钩子函数中或直接在模板中),Vue都能够检测到并更新视图的原因。这种机制避免了Angular 1.x中采用的脏检查($digest循环)模式,后者需要定期检查所有数据以发现变化,性能开销相对较大。 Vue的`computed`属性是另一种与数据绑定相关的特性。它们允许我们在不直接修改`data`中的原始属性的情况下,创建计算得出的值。`computed`属性也是响应式的,当其依赖的任何数据变化时,计算结果也会自动更新。这使得我们在处理复杂逻辑时,能够保持代码的清晰和分离,类似于后端的MVC架构。 在实际项目中,Vue的`data`层并不只是一个简单的数据容器,它可以与`computed`属性配合,承担更复杂的职责,比如异步数据获取。`mounted`钩子更适合用于初始化数据格式或处理视图级别的逻辑,而数据获取和计算可以在`data`和`computed`中完成,这样可以更好地分离关注点,提高代码可维护性。 Vue的双向数据绑定利用了JavaScript的访问器属性和响应式系统,实现了高效、灵活的数据同步,而Angular则依赖于脏检查机制。理解这些原理对于优化代码和提升应用性能至关重要。通过合理运用Vue的特性,我们可以构建出层次分明、易于维护的前端应用。
![](https://csdnimg.cn/release/download_crawler_static/13205293/bg1.jpg)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 4
- 资源: 914
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 打包和分发Rust工具.pdf
- SQL中的CREATE LOGFILE GROUP 语句.pdf
- C语言-leetcode题解之第172题阶乘后的零.zip
- C语言-leetcode题解之第171题Excel列表序号.zip
- C语言-leetcode题解之第169题多数元素.zip
- ocr-图像识别资源ocr-图像识别资源
- 图像识别:基于Resnet50 + VGG16模型融合的人体细胞癌症分类模型实现-图像识别资源
- C语言-leetcode题解之第168题Excel列表名称.zip
- C语言-leetcode题解之第167题两数之和II-输入有序数组.zip
- C语言-leetcode题解之第166题分数到小数.zip
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0