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 学习笔记 选择器之六
Jul 23 Javascript
js实现获取当前时间是本月第几周的方法
Aug 11 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
Aug 15 Javascript
jquery遍历table的tr获取td的值实现方法
May 19 Javascript
详解Node.Js如何处理post数据
Sep 19 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
深入理解Node.js中通用基础设计模式
Sep 19 Javascript
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
vue中实现左右联动的效果
Jun 22 Javascript
node中IO以及定时器优先级详解
May 10 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
JavaScript实现简单随机点名器
Nov 21 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模板技术原理【一】
2008/01/10 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
基于php缓存的详解
2013/05/15 PHP
php中动态变量用法实例
2015/06/10 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
php微信开发之谷歌测距
2018/06/14 PHP
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
python3实现mysql导出excel的方法
2019/07/31 Python
解决Python中回文数和质数的问题
2019/11/24 Python
写好自荐信的要点
2013/11/06 职场文书
财务检查整改报告
2014/11/06 职场文书
义诊活动通知
2015/04/24 职场文书
辩论会主持词
2015/07/03 职场文书
保护地球的宣传语
2015/07/13 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python