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实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
DWZ table的原生分页浅谈
Mar 01 Javascript
如何实现textarea里的不同文本显示不同颜色
Jan 20 Javascript
js获取视频时长代码
Apr 10 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
Jan 09 Javascript
JavaScript控制table某列不显示的方法
Mar 16 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
Aug 20 Javascript
详解jQuery简单的表格应用
Dec 16 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
Jan 12 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
js实现翻牌小游戏
Jul 31 Javascript
前端性能优化建议
Sep 17 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技术实现加载字体并保存成图片
2015/07/27 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
python语言使用技巧分享
2016/05/31 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python中常见的异常总结
2018/02/20 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
python实现翻译word表格小程序
2020/02/27 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
通俗讲解python 装饰器
2020/09/07 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
如何唤起类中的一个方法
2013/11/29 面试题
《少年王勃》教学反思
2014/04/27 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书