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 Tips(3) 关于$()包装集内元素的改变
Dec 14 Javascript
JavaScript 用Node.js写Shell脚本[译]
Sep 20 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
Jan 23 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 Javascript
Javascript中实现trim()函数的两种方法
Feb 04 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
Dec 28 Javascript
微信小程序云开发之使用云存储
May 17 Javascript
原生js实现trigger方法示例代码
May 22 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
Oct 11 Javascript
JQuery获得内容和属性方法解析
May 30 jQuery
JS实现京东商品分类侧边栏
Dec 11 Javascript
浅谈react路由传参的几种方式
Mar 23 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
php中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
php 禁止页面缓存输出
2009/01/07 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
php随机输出名人名言的代码
2012/10/07 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
jquery操作select大全
2014/04/25 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
用Django写天气预报查询网站
2018/10/21 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
公务员年终个人总结
2015/02/12 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
golang中字符串MD5生成方式总结
2021/07/04 Golang
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
MySQL自定义函数及触发器
2022/08/05 MySQL