Vue组件为什么data必须是一个函数


Posted in Javascript onJune 11, 2020

前言

我们需要先复习下原型链的知识,其实这个问题取决于 js ,而并非是 vue 。

function Component(){
 this.data = this.data
}
Component.prototype.data = {
  name:'jack',
  age:22,
}

首先我们达成一个共识(没有这个共识,请补充下 js 原型链部分的知识):

  • 实例它们构造函数内的this内容是不一样的。
  • Component.prototype ,这类底下的方法或者值,都是所有实例公用的。

解开疑问

基于此,我们来看看这个问题:

function Component(){
 
}
Component.prototype.data = {
  name:'jack',
  age:22,
}
var componentA = new Component();
var componentB = new Component();
componentA.data.age=55;
console.log(componentA,componentB)

此时,componentA 和 componentB data之间指向了同一个内存地址,age 都变成了 55, 导致了问题!

接下来很好解释为什么 vue 组件需要 function 了:

function Component(){
 this.data = this.data()
}
Component.prototype.data = function (){
  return {
  name:'jack',
  age:22,
}
}
var componentA = new Component();
var componentB = new Component();
componentA.data.age=55;
console.log(componentA,componentB)

此时,componentA 和 componentB data之间相互独立, age 分别是 55 和 22 ,没有问题!

总结

自己突然对这个问题懵逼,不过事后想了想还是自己基础知识忘得太快。以前学习 js 的时候,最基础的:构造函数内和原型之间的区别都模糊了。想不到 vue 这个小问题让我温故而知新了一次。

到此这篇关于Vue组件为什么data必须是一个函数的文章就介绍到这了,更多相关Vue组件data是函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript DOM 添加事件
Feb 14 Javascript
jQuery提交多个表单的小例子
Jun 30 Javascript
javascript 使用for循环时该注意的问题-附问题总结
Aug 19 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
Jun 14 Javascript
vue.js初学入门教程(1)
Nov 03 Javascript
浅谈super-vuex使用体验
Jun 25 Javascript
Node.js 的 GC 机制详解
Jun 03 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
Jul 03 Javascript
layui多图上传实现删除功能的例子
Sep 23 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
Nov 13 Javascript
vue实现导航菜单和编辑文本的示例代码
Jul 04 Javascript
前端监听websocket消息并实时弹出(实例代码)
Nov 27 Javascript
Vue实现点击箭头上下移动效果
Jun 11 #Javascript
webpack+express实现文件精确缓存的示例代码
Jun 11 #Javascript
详解vue 组件
Jun 11 #Javascript
vue实现员工信息录入功能
Jun 11 #Javascript
JavaScript Event Loop相关原理解析
Jun 10 #Javascript
vue Element左侧无限级菜单实现
Jun 10 #Javascript
详解用js代码触发dom事件的实现方案
Jun 10 #Javascript
You might like
PHP脚本的10个技巧(8)
2006/10/09 PHP
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP 代码规范小结
2012/03/08 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
Python for循环及基础用法详解
2019/11/08 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
先进德育工作者事迹材料
2014/01/24 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
文明礼仪主题班会
2015/08/13 职场文书
大学班干部竞选稿
2015/11/20 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
室外天线与收音机天线杆接合方法
2022/04/05 无线电
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android