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中的call()和apply()方法
Nov 28 Javascript
js实现键盘控制DIV移动的方法
Jan 10 Javascript
javascript实现自动填写表单实例简析
Dec 02 Javascript
JavaScript模拟push
Mar 06 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
Jun 12 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
Mar 23 Javascript
Angular弹出模态框的两种方式
Oct 19 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
May 13 Javascript
深入浅出vue图片路径的实现
Sep 04 Javascript
Vue 实现从文件中获取文本信息的方法详解
Oct 16 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
PHP新手上路(十四)
2006/10/09 PHP
php下intval()和(int)转换使用与区别
2008/07/18 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
Python中一般处理中文的几种方法
2019/03/06 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
电信专业应届生自荐信
2013/09/28 职场文书
自荐信要包含哪些内容
2013/11/06 职场文书
工作个人的自我评价
2014/01/14 职场文书
2014全年工作总结
2014/11/27 职场文书
MySQL新手入门进阶语句汇总
2022/09/23 MySQL