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 valueOf 使用方法
Dec 28 Javascript
关于URL中的特殊符号使用介绍
Nov 03 Javascript
JS 实现列表与多选框选择附预览动画
Oct 29 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
Dec 16 Javascript
jQuery使用之标记元素属性用法实例
Jan 19 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
Jun 21 Javascript
Vue仿支付宝支付功能
May 25 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
小程序实现列表删除功能
Oct 30 Javascript
vue返回上一页面时回到原先滚动的位置的方法
Dec 20 Javascript
js如何实现元素曝光上报
Aug 07 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
Sep 01 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
Ajax PHP分页演示
2007/01/02 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
JavaScript中操作字符串小结
2015/05/04 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
Python基于PycURL实现POST的方法
2015/07/25 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python中update的基本使用方法详解
2019/07/17 Python
python视频按帧截取图片工具
2019/07/23 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
django项目中新增app的2种实现方法
2020/04/01 Python
详解anaconda安装步骤
2020/11/23 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
财务人员个人自荐信范文
2013/09/26 职场文书
作文评语怎么写
2014/12/25 职场文书
卖车协议书范文
2016/03/23 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
Python中的xlrd模块使用整理
2021/06/15 Python
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
MySQL事务的隔离级别详情
2022/07/15 MySQL