vue中data为什么是一个函数?
作者:互联网
最近在学习vue的过程中,遇到了一个问题,组件中的data为什么定义为一个函数?思考了一会写了两个demo,不知道是不是可以解释这个问题,如下
vue中组件嵌套可以用一些简单的对象嵌套来模拟, 这里模仿a组件在b组件中的复用
demo1
<script>
var a = {
data: {
name: 1,
},
}
var b = {
vue1:{a},
vue2:{a},
}
console.log(b.vue1.a.data.name);//1
b.vue1.a.data.name=5; //修改vue1对象的name值
console.log(b.vue1.a.data.name);//5
console.log(b.vue2.a.data.name);//5
</script>
这里可以很清晰的看见修改vue1组件中的data数据对象的name值会对vue2中的值产生影响,这样的情况在组件复用的过程中显然是不被允许的
解决方法就是将a组件中的data数据对象修改成返回一个匿名对象的方法,b组件使用a组件的数据需要调用一次data方法来初始化数据
demo2
<script>
var a = {
data() {
return {
name: 1,
}
}
}
console.log(a);
var b = {
vue1: a.data(),
vue2: a.data(),
}
console.log(b.vue1.name);//1
console.log(b.vue2.name);//1
b.vue1.name = 5;
console.log(b.vue1.name);//5
console.log(b.vue2.name);//1
</script>
demo2中的vue1和vue2更像是对组件的一种拷贝重构,所以属性两者是独立的,vue中具体的实现可能不大相同,没有研究过,仅供参考提供一种思路,如有不足请指正,哈哈哈哈
标签:log,vue,console,函数,vue1,组件,data,name 来源: https://blog.csdn.net/m0_57789598/article/details/121745342