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的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
Sep 19 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 Javascript
JS实现点击下载的小例子
Jul 10 Javascript
Angular中的Promise对象($q介绍)
Mar 03 Javascript
JavaScript通过字符串调用函数的实现方法
Mar 18 Javascript
javascript函数特点实例分析
May 14 Javascript
JS实现的Select三级下拉菜单代码
Aug 20 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
Jun 12 Javascript
JS实现的按钮点击颜色切换功能示例
Oct 19 Javascript
一个小时快速搭建微信小程序的方法步骤
Apr 15 Javascript
vue使用节流函数的踩坑实例指南
May 20 Vue.js
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显示MySQL数据的三种方法
2008/06/05 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
php导出生成word的方法
2015/12/25 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
linux面试题参考答案(6)
2014/08/29 面试题
学生自我鉴定范文
2013/10/04 职场文书
生物技术毕业生自荐信
2013/10/23 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
运动会的口号
2014/06/09 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
php实例化对象的实例方法
2021/11/17 PHP