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 相关文章推荐
禁止F5等快捷键的JS代码
Mar 06 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
jQuery.query.js 取参数的两点问题分析
Aug 06 Javascript
JavaScript常用脚本汇总(一)
Mar 04 Javascript
jquery实现图片左右切换的方法
May 07 Javascript
省市区三级联动jquery实现代码
Apr 15 Javascript
详解Angular.js指令中scope类型的几种特殊情况
Feb 21 Javascript
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
Jul 07 Javascript
Vuex的初探与实战小结
Nov 26 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 Javascript
JavaScript实现猜数字游戏
May 20 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中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
最简单的js图片切换效果实现代码
2011/09/24 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
jQuery知识点整理
2015/01/30 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
Python循环语句中else的用法总结
2016/09/11 Python
深入理解Django的自定义过滤器
2017/10/17 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python实现京东秒杀功能代码
2019/05/16 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
python logging添加filter教程
2019/12/24 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
项目建议书模板
2014/05/12 职场文书
优秀员工评优方案
2014/06/13 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
博士论文答辩开场白
2015/06/01 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书