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 相关文章推荐
jquery $.ajax入门应用二
Nov 19 Javascript
jquery 上下滚动广告
Jun 17 Javascript
为原生js Array增加each方法
Apr 07 Javascript
提交表单时执行func方法实现代码
Mar 17 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
Nov 14 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 20 Javascript
ListBox实现上移,下移,左移,右移的简单实例
Feb 13 Javascript
Javascript中arguments用法实例分析
Jun 13 Javascript
JS中判断null的方法分析
Nov 21 Javascript
图片文字识别(OCR)插件Ocrad.js教程
Nov 26 Javascript
分享一款超好用的JavaScript 打包压缩工具
Apr 26 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
递归列出所有文件和目录
2006/10/09 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
Python对数据库操作
2016/03/28 Python
python多维数组切片方法
2018/04/13 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
python文件选择对话框的操作方法
2019/06/27 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
新学期决心书
2014/03/11 职场文书
生物科学专业自荐书
2014/06/20 职场文书
部队2014年终工作总结
2014/11/27 职场文书
2015年派出所工作总结
2015/04/24 职场文书
与死神共舞观后感
2015/06/15 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
PHP新手指南
2021/04/01 PHP
mysql sock文件存储了什么信息
2022/07/15 MySQL