vue学习笔记之:为何data是一个方法

在vue开发中,我们可以发现,data中的属性值是在function中return出来的。可为何data必须是一个函数呢?我们先看官方的解释:

当一个组件被定义, data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象

而我对这句话的理解是:

类比与引用数据类型。如果不用function return 每个组件的data都是内存的同一个地址,那一个数据改变其他也改变了,这当然就不是我们想要的。用function return 其实就相当于申明了新的变量,相互独立,自然就不会有这样的问题;js在赋值object对象时,是直接一个相同的内存地址。所以为了每个组件的data独立,采用了这种方式。如果不是组件的话,正常data的写法可以直接写一个对象,比如data:{ msg : ' 下载 ' },但由于组件是会在多个地方引用的,JS中直接共享对象会造成引用传递,也就是说修改了msg后所有按钮的msg都会跟着修改,所以这里用function来每次返回一个对象实例

转载于:https://www.cnblogs.com/momozjm/p/8572385.html

vue学习笔记之:为何data是一个方法相关推荐

  1. Vue学习笔记:Element时间控件设置某一个日期禁止选择

    Vue学习笔记:Element时间控件添加一段时间禁止选择 需求:时间控件,当天之前禁止选择,某一个日期的之前时间禁止选择 文档: 代码实现:在时间控件上添加 :picker-options=&quo ...

  2. Vue学习笔记进阶篇——Render函数

    本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...

  3. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  4. vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?

    vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 文章目录 vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 什么是组件? 为什么要使用组件? 如何使用 ...

  5. vue学习笔记-02-前端的发展历史浅谈mmvm设计理念

    vue学习笔记-02-前端的发展历史浅谈mmvm设计理念 文章目录 1. MVVM模式的实现者 2.第一个vue程序 3.什么是mvvm? 4.为什么要用mvvm? 5.mvvm的组成部分 7.MVV ...

  6. Vue学习笔记:使用CLI构建Vue项目

    Vue学习笔记:使用CLI构建Vue项目 一.安装Vue CLI 要用到集成在node.js里的npm来安装Vue CLI. 1.下载并安装node.js 2.配置node.js的环境变量 3.启动命 ...

  7. Vue学习笔记(五)—— 状态管理Vuex

    介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试 ...

  8. Vue学习笔记(三) —— 前后端交互

    简介 本文主要是为了介绍前端交互的相关知识,而严格来讲,这也不算是Vue的专属知识,但是却是必须要指定的.本文开始简单说了ajax.jquery 的方式,但是随着SPA开发模式的大火,相继出现了一些新 ...

  9. Vue学习笔记进阶篇——多元素及多组件过渡

    本文为转载,原文:Vue学习笔记进阶篇--多元素及多组件过渡 多元素的过渡 对于原生标签可以使用 v-if/v-else.但是有一点需要注意: 当有相同标签名的元素切换时,需要通过 key 特性设置唯 ...

最新文章

  1. 阿里java高级工程师面试100题(建议收藏)
  2. c++test能不能导入keil工程_深度解析AutoML框架——H2O:小白也能使用的自动机器学习平台...
  3. android按钮点击后闪退_CAD如何恢复自动崩溃、闪退的文件?
  4. MySQL设置从库只读模式
  5. 洛谷T172100 商店-贪心
  6. Bootstrap初步
  7. java二级为什么没题库_为什么刷了那么多二级java试题,却依然提高不了分数?...
  8. 【 Linux 网络虚拟化 】Netns
  9. PMP第五版第一次考试相关提醒
  10. 电脑连接示波器读取数据
  11. 寻找两个正序数组中的中位数 数组
  12. 第 49 章 Lighttpd
  13. 想给视频去色并加马赛克就用它
  14. Eclipse打开目标文件夹
  15. visio阵列_用Visio2010制作最专业的技术流程图教程
  16. AutoJsPro,猜歌红包群(看广告游戏脚本源码)
  17. android touch事件无反应,触摸屏 无响应
  18. C++:从入门到放弃[1]基础知识
  19. python学习(二)配置开发IDE(windows)
  20. C语言热电阻温度查表,PT100热电阻值与温度对照表

热门文章

  1. div css入门教程,更简洁CSS清理浮动方式:clearfix
  2. pip download timeout 下载慢,超时解决方法
  3. mysql连接超时timeout问题
  4. 运维工程师必会的linux命令下载,运维工程师必会的109个Linux命令.pdf
  5. vscode html 格式化_详解VSCode 格式化不符合预期的问题
  6. cinder连接mysql数据库_Openstack入门篇(十六)之Cinder服务的部署与测试
  7. 用java自动化访问百度测试_java+eclipse+selenium+百度搜索设置自动化测试
  8. 钉钉上手体会:阿里实用主义的野望
  9. HTML常用标签+CSS基础
  10. 大厂产品经理是如何做好用数据驱动业务增长的?