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代码 var ie = !-[1,] 最短的IE判定代码
May 28 Javascript
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
JavaScript的strict模式与with关键字介绍
Feb 08 Javascript
javascript生成不重复的随机数
Jul 17 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
js窗口震动小程序分享
Nov 28 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
关闭Vue计算属性自带的缓存功能方法
Mar 02 Javascript
react redux入门示例
Apr 19 Javascript
解决bootstrap-select 动态加载数据不显示的问题
Aug 10 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 中include()与require()的对比
2006/10/09 PHP
mysql建立外键
2006/11/25 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
js实现点击按钮复制文本功能
2020/07/20 Javascript
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
python 监控logcat关键字功能
2020/09/04 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
python Scrapy框架原理解析
2021/01/04 Python
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
创伤外科专业推荐信范文
2013/11/19 职场文书
项目计划书范文
2014/01/09 职场文书
办公室主任先进事迹
2014/01/18 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
详解Python requests模块
2021/06/21 Python
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
什么是SOLID
2022/03/24 Javascript