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技巧来提高你的代码
Jan 08 Javascript
JS localStorage实现本地缓存的方法
Jun 22 Javascript
replace()方法查找字符使用示例
Oct 28 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
jQuery窗口、文档、网页各种高度的精确理解
Jul 02 Javascript
JS随机打乱数组的方法小结
Jun 22 Javascript
微信小程序 devtool隐藏的秘密
Jan 21 Javascript
详解JS中遍历语法的比较
Apr 07 Javascript
php register_shutdown_function函数详解
Jul 23 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
nuxt配置通过指定IP和端口访问的实现
Jan 08 Javascript
JavaScript中isPrototypeOf函数
Nov 07 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
CI框架网页缓存简单用法分析
2018/12/26 PHP
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python切片知识解析
2016/03/06 Python
Python unittest模块用法实例分析
2018/05/25 Python
python中字符串的操作方法大全
2018/06/03 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
python检测IP地址变化并触发事件
2018/12/26 Python
python字典的常用方法总结
2019/07/31 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
干部下基层实施方案
2014/03/14 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
国际贸易实训报告
2014/11/05 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
长江七号观后感
2015/06/11 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
解析redis hash应用场景和常用命令
2021/08/04 Redis
MySQL数据库事务的四大特性
2022/04/20 MySQL
Python如何将list中的string转换为int
2022/07/15 Ruby